Toon posts:

[vb6] Hoe een form "Always on top"?

Pagina: 1
Acties:
  • 148 views sinds 30-01-2008

Verwijderd

Topicstarter
Hi y'all
Weet iemand hoe je in visual basic het voor elkaar krijgt dat een bepaalde form niet steeds achter andere schermpjes verdwijnt (always on top, zoals winamp of msn)?

Het staat niet in de properties. Maar het kan wel. Moet het met een code? Wat is die code??? thanx!

  • roelkw
  • Registratie: Augustus 2000
  • Laatst online: 04-08 14:28
Bij Delphi staat 't wel in de properties van het form, lijkt me eignelijk ook best wel logisch.. issut niet ergens verborgen?

En trouwens: zoek 'ns in de VB-manual op "always on top", wedden dat je iets vind?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Nee, je hebt er een API call voor nodig...:
code:
1
2
3
4
5
6
7
8
9
10
Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2

Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Public Function SetAlwaysOnTop(ByVal pbOnTop As Boolean, ByVal hWnd As Long)
    SetWindowPos hWnd, IIf(pbOnTop, HWND_TOPMOST, HWND_NOTOPMOST), 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Function

Exact expert nodig?


Verwijderd

Topicstarter
Ok thanx! maar hoe gaat de code dan, als ik Form1 always on top wil laten zijn?


Private Sub Form_Load()

SetAlwaysOnTop True, (en dan??)

End Sub

Verwijderd

Op donderdag 05 juli 2001 22:01 schreef Teup het volgende:
Ok thanx! maar hoe gaat de code dan, als ik Form1 always on top wil laten zijn?


Private Sub Form_Load()

SetAlwaysOnTop True, (en dan??)

End Sub
hwnd is de handle van je window
dus als je form1 on top wil zetten zeg je

SetAlwaysOnTop True, Form1.hwnd

:)

Verwijderd

Topicstarter
ok! ja dat hwnd heb ik altijd maar een Btje ontweken, dat snapte ik nooit echt |:(

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

Op vrijdag 06 juli 2001 00:12 schreef Teup het volgende:
ok! ja dat hwnd heb ik altijd maar een Btje ontweken, dat snapte ik nooit echt |:(
Dan is nu de tijd gekomen om eens te gaan kijken wat het is. hWnd is een waarde die het window voor windows uniek identificeert. Dus als je wilt dat windows IETS met je window doet, moet je 1-of-andere functie aanroepen en de hWnd meegeven om te vertellen met welk window hij het moet doen.

Op die manier kun je vaak ook windows van andere applicaties manipuleren (sluiten, minimizen, moven, etc.) door hun hWnd op te zoeken en die door te passen aan bepaalde windows API functies.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Let wel, hWnd gebruik je in principe alleen als je de Api gebruikt, binnen VB heb je 'm in principe niet nodig.

Exact expert nodig?


  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

Ok..antwoord is al gegeven..dit is ook niet echt wat hij zoekt..maar misschien wel weer leuk 4 just knowing (ofzo ;-) )
code:
1
me.show vbModal

of
code:
1
chatform.show vbModal

gr. Maarten

(of hebik het weer mis? :o )

  • baskabas
  • Registratie: December 2000
  • Laatst online: 05-04 12:26
Op vrijdag 06 juli 2001 16:33 schreef Mir het volgende:
Ok..antwoord is al gegeven..dit is ook niet echt wat hij zoekt..maar misschien wel weer leuk 4 just knowing (ofzo ;-) )
code:
1
me.show vbModal

of
code:
1
chatform.show vbModal

gr. Maarten

(of hebik het weer mis? :o )
Yep, is alleen geldig voor de forms binnen je project.

  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

is idd wel even leuk om te zeggen wat het doet ;)

Het zorgt er dus voor dat een 2e form in je project voorop blijft staan en de achterligende niet meer gebruikt kunnen worden en alleenmaar zichtbaar zijn..

of is dit prz hetzelfde als wat teknogecko zei? :?

  • baskabas
  • Registratie: December 2000
  • Laatst online: 05-04 12:26
Lol! Dat was eigenlijk wel de bedoeling... marja ... nu is het zeker duidelijk! ;)

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 20-08 20:03

Knutselsmurf

LED's make things better

Op vrijdag 06 juli 2001 16:40 schreef Mir het volgende:
is idd wel even leuk om te zeggen wat het doet ;)

Het zorgt er dus voor dat een 2e form in je project voorop blijft staan en de achterligende niet meer gebruikt kunnen worden en alleenmaar zichtbaar zijn..

of is dit prz hetzelfde als wat teknogecko zei? :?
In dat geval is een andere oplossing waarschijnlijk handiger. Ik ben niet helemaal thuis in VB, maar in Delphi kun je ipv. form2.show form2.showmodal gebruiken. Dan komt form2 naar de voorgrond en blijft actief totdat het gesloten wordt. De andere forms uit je applicatie zijn dan niet actief.
Of wil je dat er ook geen andere applicaties voor kunnen komen? In dat geval zal je die API-functie moeten gebruiken. Daarmee zorg je er echter niet voor dat achterliggende windows niet actief worden... Kijk maar naar Winamp. Die blijft op de voorgrond maar is niet actief.

- This line is intentionally left blank -


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Maar als je ook nog eens wilt dat geen andere app dan de jouwe actief kan worden, kun je nog een subclassje over je form heengooien, en afvangen wanneer je form de focus verliest, en dan de focus terugzetten (niet netjes, werkt wel ;) )
vbModal is trouwens idd dat die form die je modal showt, voor de andere forms in het project komt te hangen, en die andere forms zijn niet te gebruiken door de gebruiker totdat de modale form gesloten is.
vbModeless is het gewoon een 2e windootje wat open is (zoals een nieuw mailtje maken in Outlook), maar je kan vrolijk verder werken in de 1e.

Exact expert nodig?


  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

Op vrijdag 06 juli 2001 16:54 schreef Knutselsmurf het volgende:

[..]

In dat geval is een andere oplossing waarschijnlijk handiger. Ik ben niet helemaal thuis in VB, maar in Delphi kun je ipv. form2.show form2.showmodal gebruiken. Dan komt form2 naar de voorgrond en blijft actief totdat het gesloten wordt. De andere forms uit je applicatie zijn dan niet actief.
Of wil je dat er ook geen andere applicaties voor kunnen komen? In dat geval zal je die API-functie moeten gebruiken. Daarmee zorg je er echter niet voor dat achterliggende windows niet actief worden... Kijk maar naar Winamp. Die blijft op de voorgrond maar is niet actief.
Nee, dit werkt niet zo in VB... je kan namenlijk met form2.show [iets] veel meer doen dan alleen vbModal.. zijn geloof ik (uit mn hoofd) 6 verschillende 'opties'.

  • BramT
  • Registratie: Oktober 2001
  • Laatst online: 21-08 12:36

BramT

Rule #1

Goed.. ik haal 'm weer even naar boven want ik zit met hetzelfde probleem... en deze oplossingen (en uit andere threads) werken niet helemaal..

Ik wil, heel simpel, dat mijn progje een ander programma start. MAAR wel een splashscreen (form1) laat zien die een seconde of 2 blijft staan BOVEN het net gestarte programma... (er gebeurt nog veel meer gerommel in de achtergrond, maar dat doet er even niet toe)

Probleem (1 van de iig) is dat je niet weet wanneer het 2e progje is geladen en zichzelf laat zien...

Ik ben een 100% noob met VB, heb dit projectje overgenomen van iemand anders, dus aub beetje uitleg erbij (ken wel andere programeertalen, dus de basics ken ik wel.. ;))


(
vbModal functie geeft error: "window already is modal" ofzoiets..
en de oplossing van Crazy D ziet er goed uit, maar heeft geen effect... (m'n form verdwijnt nog steeds achter het net geopende programma)
het nieuwe programma is overigens niet "always on top"
)

[ Voor 19% gewijzigd door BramT op 07-08-2003 05:13 ]

You are the all-dancing, all-singing crap of the world - Jack


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21-08 18:33
BramT schreef op 07 August 2003 @ 05:11:
vbModal functie geeft error: "window already is modal" ofzoiets..
en de oplossing van Crazy D ziet er goed uit, maar heeft geen effect... (m'n form verdwijnt nog steeds achter het net geopende programma)
het nieuwe programma is overigens niet "always on top"
)
'Cant show non-modal form when modal form is displayed'
Betekent wat het zegt, als je een modal form hebt ( bv een dialoog formpje ) kun je geen non-modal form laten displayen. Dit is logisch want het modal form moet eerst worden gesloten, aangezien het in je applicatie exclusief de focus heeft.

Met die API call zou je in principe topmost moeten zijn, maar als er een nieuw window wordt geopend wordt hij topmost. Je moet dan opnieuw je window topmost maken.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • GigaDave56
  • Registratie: Juni 2001
  • Laatst online: 14-12-2025
@ BramT

Zelf heb ik mijn splash screen zo opgezet. Eerst laad ik de splash, die ik vooraan zet via de eigenschap .ZOrder. Dan laadt ik het hoofdscherm, die ik achteraan zet via de eigenschap .ZOrder en disable hem.

Als het hoofdscherm de focus krijgt als het splash screen er nog is, zet ik het hoofdscherm weer achteraan en geef de focus terug aan het splash screen.
Als het splash screen verdwijnt, wordt het hoofdscherm enabled.

Misschien niet de meest nette methode, maar het werkt voor mij. 8)

Not so Giga One
> I'd sell my soul for you, babe
> For money to burn, for you
> I'd give you all and have none, babe
> Just to, just to, to have you here by me... [Scooter - Rebel yell]


  • BramT
  • Registratie: Oktober 2001
  • Laatst online: 21-08 12:36

BramT

Rule #1

Hmmmja, probleem is dus dat het om een compleet extern programma gaat.. Of kan ik vanuit een vb-progje ieder willekeurig programma op deze manier aanpassen?

You are the all-dancing, all-singing crap of the world - Jack


  • BramT
  • Registratie: Oktober 2001
  • Laatst online: 21-08 12:36

BramT

Rule #1

Fantastisch.. heb het al gevonden...

Het werkte dus allemaal wel, maar er stond nog een "End" commando ergens waar die niet moest staan... :(

dom dom dom dom dom

You are the all-dancing, all-singing crap of the world - Jack


  • comprobot
  • Registratie: Augustus 2000
  • Laatst online: 07-08 19:54
End is niet goed..

www.tiedragon.nl


  • comprobot
  • Registratie: Augustus 2000
  • Laatst online: 07-08 19:54

www.tiedragon.nl


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Gaat nergens meer over :z

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.