Guten Tag allerseits,
Ich hab' da mal eine Frage:
Wenn ein kleines "Nebenfenster" im Programm nicht aktiv ist (also bei XP z.B. oben die Leiste nicht blau ist), und man mit dem Mauszeiger oben auf diese Leiste geht und den Mauszeiger runterklickt und unten festhält, wird diese Leiste blau, jedoch ich finde kein event was ich mittels WaitWindowEvent() packen könnte.
Erst wenn ich den Mauszeiger über diese blau gewordene Leiste los lasse, wird ein event ausgelöst, nämlich #PB_Event_ActivateWindow
Gehe ich mit dem Mauszeiger über ein Gadget (Textfeld, Button, ...) eines nicht aktiven Fensters und klicke mit dem Mauszeiger auf ein solches Gadget und halte den Mauszeiger unten, wird ein event ausgelöst, nämlich #PB_Event_Gadget und die Leiste wird natürlich blau.
Wie krieg ich dieses event zu packen, das schon beim runterklicken auf die graue und dann blau werdende Leiste "auslöst" ?
Nein, ich hab kein XP mehr und arbeite mir PB 5.0
Danke im voraus für eure Hilfe !
Grüsse
irobot
-----------------------
http://www.der-prozess.de
[color=#FF0000][i]Verschoben von Allgemein nach Anfänger von NicTheQuick[/i][/color]
Fenster ist Aktiv...
Re: Fenster ist Aktiv...
Unter Windows kannst du folgendes versuchen :
Code: Alles auswählen
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure Callback(hWnd, Msg, wParam, lParam)
If Msg = #WM_MOUSEACTIVATE
If lParam & $FFFF = #HTCAPTION
Debug "Activate"
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure start()
Protected window
Protected event
window = OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 250, 120, "")
SetWindowCallback(@Callback(), window)
While #True
event = WaitWindowEvent()
Select event
Case #PB_Event_CloseWindow : Break
Case #PB_Event_SizeWindow
Case #PB_Event_Gadget
Case #PB_Event_Menu
EndSelect
Wend
EndProcedure:End start()
Re: Fenster ist Aktiv...
Hallo Edel,
danke erstmal für deine Hilfe ! (ich habe nicht viel verstanden...)
Was ist das was ich da aufrufe ?
Wie kann ich der Prozedur "Callback(hWnd, Msg, wParam, lParam)" mitteilen, dass z.B. Window Nr. 12 gerade angeklickt wurde ? Oder Window Nr. 9 ?
Was kann ich mit "#PB_ProcessPureBasicEvents" machen ?
Grüsse
irobot
danke erstmal für deine Hilfe ! (ich habe nicht viel verstanden...)
Was ist das was ich da aufrufe ?
Wie kann ich der Prozedur "Callback(hWnd, Msg, wParam, lParam)" mitteilen, dass z.B. Window Nr. 12 gerade angeklickt wurde ? Oder Window Nr. 9 ?
Was kann ich mit "#PB_ProcessPureBasicEvents" machen ?
Grüsse
irobot
Re: Fenster ist Aktiv...
Jedes Fenster (egal ob Gadget oder Fenster) hat eine interne Funktion, in der steht was das Fenster
ueberhaupt machen soll. Um an die Nachrichten von diesem Fenster zu kommen, muss man die eigene
Funktion vor die Fensterfunktion "schieben". Das passiert hier mit Hilfe von SetWindowCallback().
Damit das Fenster aber nicht seine eigentliche Aufgabe verliert, gibt man hier noch
PB_ProcessPureBasicEvents mit an. Das sagt der Funktion, dass die Nachricht auch an die Funktion
darueber geschickt werden soll.
Der hWnd Parameter in dem Callback ist dein Fensterhandle, also das was du bekommst wenn du
WindowID() benutzt. Um deine PBNummer wieder zurueckzukommen kannst du diese vorher speichern,
oder weitere API Befehle benutzen.
ueberhaupt machen soll. Um an die Nachrichten von diesem Fenster zu kommen, muss man die eigene
Funktion vor die Fensterfunktion "schieben". Das passiert hier mit Hilfe von SetWindowCallback().
Damit das Fenster aber nicht seine eigentliche Aufgabe verliert, gibt man hier noch
PB_ProcessPureBasicEvents mit an. Das sagt der Funktion, dass die Nachricht auch an die Funktion
darueber geschickt werden soll.
Der hWnd Parameter in dem Callback ist dein Fensterhandle, also das was du bekommst wenn du
WindowID() benutzt. Um deine PBNummer wieder zurueckzukommen kannst du diese vorher speichern,
oder weitere API Befehle benutzen.
Code: Alles auswählen
Global NewMap WindowHandleMap.i()
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure Callback(hWnd, Msg, wParam, lParam)
If Msg = #WM_MOUSEACTIVATE
If lParam & $FFFF = #HTCAPTION
Debug "Activate : " + Str(WindowHandleMap(Str(hWnd)))
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure start()
Protected window
Protected event
OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 120, "0")
OpenWindow(1, #PB_Ignore, #PB_Ignore, 250, 120, "1")
OpenWindow(2, #PB_Ignore, #PB_Ignore, 250, 120, "2")
WindowHandleMap(Str(WindowID(0))) = 0
WindowHandleMap(Str(WindowID(1))) = 1
WindowHandleMap(Str(WindowID(2))) = 2
SetWindowCallback(@Callback(), 0)
SetWindowCallback(@Callback(), 1)
SetWindowCallback(@Callback(), 2)
While #True
event = WaitWindowEvent()
Select event
Case #PB_Event_CloseWindow : Break
Case #PB_Event_SizeWindow
Case #PB_Event_Gadget
Case #PB_Event_Menu
EndSelect
Wend
EndProcedure:End start()
Re: Fenster ist Aktiv...
Wenn das Fenster mit PB erstellt wurde, bekommt man die Fensternummer auch mit
zurück. So braucht man keine Listen,Maps oder sonstige Speicherungen vornehmen.
Wenn Result = -1 ist, so ist das Window nicht mit PB OpenWindow() erstellt worden und trägt somit
dieses Property nicht mit sich rum.
Code: Alles auswählen
Result = GetProp_(hWnd, "PB_WINDOWID") - 1
Wenn Result = -1 ist, so ist das Window nicht mit PB OpenWindow() erstellt worden und trägt somit
dieses Property nicht mit sich rum.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Fenster ist Aktiv...
Danke erstmal an euch allen !
fühle mich ein wenig wie ein Fahrschüler in der zweite Fahrstunde, dem gerade erklärt wurde, wie man mit Heckantrieb und Differentialsperre ein Driftwinkel von 30° hinkriegt.
Aber trotzdem, ich weiss jetzt ungefähr, wie ich es anpacken muss...
Grüsse
irobot
--------------------
www.der-prozess.de
fühle mich ein wenig wie ein Fahrschüler in der zweite Fahrstunde, dem gerade erklärt wurde, wie man mit Heckantrieb und Differentialsperre ein Driftwinkel von 30° hinkriegt.
Aber trotzdem, ich weiss jetzt ungefähr, wie ich es anpacken muss...
Grüsse
irobot
--------------------
www.der-prozess.de