Aktuelle Zeit: 05.03.2021 08:30

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: PB 4.3 und WindowFromPoint
BeitragVerfasst: 27.03.2009 21:20 
Offline
Benutzeravatar

Registriert: 27.02.2006 22:30
Wohnort: Neumünster
Für alle die 32 Bit Programme schreiben und auch in nächster Zukunft schreiben wollen.

Die Parameter Umstellung für WindowFromPoint nervt mich etwas.

im englischen Forum habe ich nun folgendes gesehen:
anstatt
Code:
hndl=WindowFromPoint_(cursor\y<<32|cursor\x)

kann man auch
Code:
hndl=WindowFromPoint_(PeekQ(@cursor))
nehmen

Democode aus dem englischen Forum:
Code:
Procedure.l EventHoverGadget()
Protected cursor.POINT,hndl.l
  GetCursorPos_(cursor.POINT)
  hndl=WindowFromPoint_(PeekQ(@cursor))
  If hndl
   hndl=GetDlgCtrlID_(hndl)
   If hndl
    ProcedureReturn hndl
   EndIf
  EndIf
 
ProcedureReturn 0
EndProcedure

OpenWindow(1,0,0,400,100,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)

ButtonGadget(1,10,10,380,20,"Button 1") ;Please note that the first gadgetid start with 1
ButtonGadget(2,10,30,380,20,"Button 2")

hover=0
oldhover=hover
Repeat
 event=WindowEvent()
 Select event
  Case #WM_MOUSEMOVE

   hover=EventHoverGadget()
   If hover<>oldhover
    Select hover
     Case 1 : SetGadgetText(1,"Hover")
     Case 2 : SetGadgetText(2,"Hover")
    EndSelect
    Select oldhover
     Case 1 : SetGadgetText(1,"Button 1")
     Case 2 : SetGadgetText(2,"Button 2")
    EndSelect
    oldhover=hover
   EndIf

 EndSelect
 Delay(1)
Until event = #PB_Event_CloseWindow


und nun hab ich mir gedacht, wenn es denn ein 64 Bit Wert sein soll/muß, egal wie der zustande kommt, dann kann man es auch so machen wie früher in der guten alten Zeit. Hat schon Opa gesagt :D

Mein alter Freund heißt Import:
Code:
Import "USER32.lib"
 WindowFromPoint32_(a.l,b.l) As "_WindowFromPoint"
EndImport

Procedure.l EventHoverGadget()
Protected cursor.POINT,hndl.l
  GetCursorPos_(cursor.POINT)
  hndl=WindowFromPoint32_(cursor\x,cursor\y)
  If hndl
   hndl=GetDlgCtrlID_(hndl)
   If hndl
    ProcedureReturn hndl
   EndIf
  EndIf
 
ProcedureReturn 0
EndProcedure

OpenWindow(1,0,0,400,100,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)

ButtonGadget(1,10,10,380,20,"Button 1") ;Please note that the first gadgetid start with 1
ButtonGadget(2,10,30,380,20,"Button 2")

hover=0
oldhover=hover
Repeat
 event=WindowEvent()
 Select event
  Case #WM_MOUSEMOVE

   hover=EventHoverGadget()
   If hover<>oldhover
    Select hover
     Case 1 : SetGadgetText(1,"Hover")
     Case 2 : SetGadgetText(2,"Hover")
    EndSelect
    Select oldhover
     Case 1 : SetGadgetText(1,"Button 1")
     Case 2 : SetGadgetText(2,"Button 2")
    EndSelect
    oldhover=hover
   EndIf

 EndSelect
 Delay(1)
Until event = #PB_Event_CloseWindow


und siehe da, alles ist wie man es kennt :mrgreen:

_________________
Purebasic 5.41 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 27.03.2009 21:34 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Die vorherige Form war ja ein Notlösung, weil PB kein POINT ByVal
übergeben konnte, laut MSDN ist es nur ein Parameter, da wäre es blöd,
wenn man die alte Schreibweise beibehält, ist ja wie nie Updaten wollen :mrgreen:

_________________
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 27.03.2009 21:46 
Offline
Benutzeravatar

Registriert: 27.02.2006 22:30
Wohnort: Neumünster
aber das hier ist ja wohl noch blöder

Code:
cursor\y<<32|cursor\x


da kriegen ja andere "Sprachen" einen Lachkoller :lol: :lol: :lol:

_________________
Purebasic 5.41 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 27.03.2009 21:47 
Offline

Registriert: 10.11.2004 03:22
man kann StructureUnion benutzen um einen Container zu bauen...
Code:
Structure ValPoint
  StructureUnion
    P.POINT
    V.q
  EndStructureUnion
EndStructure

Define CheckPoint.ValPoint

CheckPoint\P\x = 384
CheckPoint\P\x = 256

hWnd = WindowFromPoint_( CheckPoint\V )

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 27.03.2009 23:33 
Offline
Benutzeravatar

Registriert: 27.02.2006 22:30
Wohnort: Neumünster
sehr gute Idee, wenn schon modern,

dann also so:
Code:
Structure Point64
  StructureUnion
    p.POINT
    q.q
  EndStructureUnion
EndStructure

Procedure.l EventHoverGadget()

  GetCursorPos_(cursor.POINT64)
   
  hndl = WindowFromPoint_( cursor\q )
  If hndl
   hndl=GetDlgCtrlID_(hndl)
   If hndl
    ProcedureReturn hndl
   EndIf
  EndIf
 
ProcedureReturn 0
EndProcedure

OpenWindow(1,0,0,400,100,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)

ButtonGadget(1,10,10,380,20,"Button 1") ;Please note that the first gadgetid start with 1
ButtonGadget(2,10,30,380,20,"Button 2")

hover=0
oldhover=hover
Repeat
 event=WindowEvent()
 Select event
  Case #WM_MOUSEMOVE

   hover=EventHoverGadget()
   If hover<>oldhover
    Select hover
     Case 1 : SetGadgetText(1,"Hover")
     Case 2 : SetGadgetText(2,"Hover")
    EndSelect
    Select oldhover
     Case 1 : SetGadgetText(1,"Button 1")
     Case 2 : SetGadgetText(2,"Button 2")
    EndSelect
    oldhover=hover
   EndIf

 EndSelect
 Delay(1)
Until event = #PB_Event_CloseWindow

_________________
Purebasic 5.41 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 27.03.2009 23:37 
Offline

Registriert: 10.11.2004 03:22
geht denn das überhaupt:
Code:
GetCursorPos_(cursor.POINT64)

ich würde jetzt erstmal denken, dass man cursor\q übergeben muss....

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.03.2009 00:28 
Offline
Benutzeravatar

Registriert: 27.02.2006 22:30
Wohnort: Neumünster
ja das geht wohl, denn Beispielcode funkt.

und da ich ein fauler S... bin, stopfe ich das in eine Residentdatei.
incl. ein paar anderer Sachen die ich brauche

Code:
;HJBremers Resident Datei

;als myres.pb im Ordner \PureBasic430\Compilers abspeichern
;Eingabeaufforderung aufrufen und ins obige Verzeichnis wechseln
;pbcompiler myres.pb /resident myres.res eingeben
;dann das Ergebnis myres.res ins Resident Verzeichnis kopieren
;PB beenden und neu starten
;die Strukturen werden jetzt in Werkzeuge-Strukturverzeichnis aufgelistet
;und die Makros stehen als neue Befehle zur Verfügung incl. Kurzinfo in der IDE

;wenn diese myres.res geändert werden soll, muß diese vor Aufruf von pbcompiler...
; aus dem Resident Verzeichnis gelöscht werden !

Macro MakeLong(low, high)
  low | (high<<16)
EndMacro

Macro LowWord(Value)
  Value & $FFFF
EndMacro

Macro HighWord(Value)
  (Value >> 16) & $FFFF
EndMacro

Structure char_array
  c.c[0]
EndStructure

Structure strg_array
  s.s{1}[0]
EndStructure

;von Kaeru Gaman
Structure Point64
  StructureUnion
    p.POINT
    q.q
  EndStructureUnion
EndStructure



PS: die Erklärung ist mehr für mich, weil ichs immer vergesse, besonders das Löschen

_________________
Purebasic 5.41 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.03.2009 00:37 
Offline

Registriert: 10.11.2004 03:22
> ja das geht wohl, denn Beispielcode funkt.

aha.... ist ja interessant.
wahrscheinlich, weils ne API funktion ist die sowieso nen Pointer zu ner Struct erwartet, keinen Wert.

für mich käme so eine Vorgehensweise weniger in Frage, weil ich sowieso
bei allen codes die länger als vierzig Zeilen sind EnableExplicit benutze... ;)

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB 4.3 und WindowFromPoint
BeitragVerfasst: 05.07.2011 17:52 
Offline
Benutzeravatar

Registriert: 15.02.2007 21:31
Zitat:
aha.... ist ja interessant.
wahrscheinlich, weils ne API funktion ist die sowieso nen Pointer zu ner Struct erwartet, keinen Wert.


Und woher nimmst du deine falschen Infos? Bei MSDN steht nichts darüber, das es ein Pointer ist. Vielmehr ist es die Struktur selber, sind also zwei Parameter. PureBasic hat diese WindowFromPoint demnach eigentlich falsch deklariert.

_________________
Gruß, Frank


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB 4.3 und WindowFromPoint
BeitragVerfasst: 06.07.2011 13:19 
Offline
jaAdmin
Benutzeravatar

Registriert: 13.09.2004 17:48
ui .. ein Leichenschänder :D

KG s letzter Eintrag ist vom 8. Mai 2010 12:22, seitdem hält der Frosch offiziell Funkstille

_________________
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye