WinAPI Library (Snippets) (1163 Beispielcodes)

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

RSBasic hat geschrieben: Sonstige:
• Anderes Icon im MessageRequester
Kommt mir bekannt vor :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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

ts-soft hat geschrieben:
RSBasic hat geschrieben: Sonstige:
• Anderes Icon im MessageRequester
Kommt mir bekannt vor :mrgreen:
Japp, dank dir :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Hallo. Erstmal : :allright: für mich API-"Noob" eine wahre Fundgrube.

Da hab ich versucht dein Programmbeispiel Gadgets->Mouseover auszuprobieren, aber es funktioniert nicht !
Fehlermeldung : PtInRect() : Falsche Anzahl an Parametern !
Laut MSDN sind es nur 2 Parameter, die diese Funktion erwartet, aber ich kriegs ums umfallen nicht hin.

Dein Schnipsel ist

Code: Alles auswählen

Procedure Thread()
  Repeat
    GetWindowRect_(GadgetID(1),re.RECT)
    GetCursorPos_(pt.POINT)
    If PtInRect_(re,pt\x,pt\y)=1           ; <----- Hier die falsche Anzahl an Parametern
      SetGadgetText(2,"MouseOver: Ja")
    Else
      SetGadgetText(2,"MouseOver: Nein")
    EndIf
    Delay(100)
  ForEver
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(1,10,10,100,20,"Test-Button",0)
    TextGadget(2,10,40,100,20,"",0)
  EndIf
  CreateThread(@Thread(),0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
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​​
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Der Code enthält 2 Fehler. Zu PtInRect_() siehe:
http://www.purebasic.fr/english/viewtop ... 893#274893

Threadprocedure hat immer einen parameter

Code: Alles auswählen

Procedure Thread(dummy)
  Repeat
    GetWindowRect_(GadgetID(1),re.RECT)
    GetCursorPos_(pt.POINT)
    If PtInRect_(re, pt\y << 32 + pt\x) = 1
      SetGadgetText(2,"MouseOver: Ja")
    Else
      SetGadgetText(2,"MouseOver: Nein")
    EndIf
    Delay(100)
  ForEver
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(1,10,10,100,20,"Test-Button",0)
    TextGadget(2,10,40,100,20,"",0)
  EndIf
  CreateThread(@Thread(),0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Bisonte
Danke fürs Melden,
in PB 4.20 hat es damals noch funktioniert und auch wegen dem Parameter des Threads, da brauchte man nicht unbedingt einen Parameter.
Aber das hat sich anscheinend geändert^^

@ts-soft
Danke fürs Verbessern, werd ich beim nächsten Update den Code aktualisieren :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

RSBasic hat geschrieben:@Bisonte
Danke fürs Melden,
in PB 4.20 hat es damals noch funktioniert und auch wegen dem Parameter des Threads, da brauchte man nicht unbedingt einen Parameter.
Aber das hat sich anscheinend geändert^^
Da hat sich ueberhaupt nichts geaendert.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

Dann hat PB damals bei mir nie gemeckert, erst bei PB 4.30.
War wohl mein Fehler :wink:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

edel hat geschrieben:
RSBasic hat geschrieben:@Bisonte
Danke fürs Melden,
in PB 4.20 hat es damals noch funktioniert und auch wegen dem Parameter des Threads, da brauchte man nicht unbedingt einen Parameter.
Aber das hat sich anscheinend geändert^^
Da hat sich ueberhaupt nichts geaendert.
Oh, doch, PtInRect_() wurde in PB4.30 geändert und der fehlende Parameter
einer Threadprocedure wird jetzt auch vom Compiler angemeckert, war aber
schon immer erforderlich (fehlen führte zu merkwürdigen fehlern)
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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Ich meinte den fehlenden Parameter, dieser war, wie du ja selbst
schreibst, immer erforderlich. Dabei spielt es keine Rolle ob da jetzt
der Kompiler meckert oder nicht.
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

thx. Das mit der Parameterübergabe für Threads hatte ich auch schon gemerkt, aber
PtInRect_(re, pt\y << 32 + pt\x)
war der schlüssel ;)

Achja und natürlich CreateGadgetList() entfernen ;)
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​​
Antworten