Seite 2 von 2

Verfasst: 21.07.2006 19:59
von AND51
Ja, ich weiß was du meinst. Sowas habe ich schonmal gemacht.
Da der Source noch aus älteren Zeiten stammt, als ich noch ein junger Spring-ins-Feld war, graut mir vor einer Modernisierung des Codes, obwohl ich mich nach so einer Modernisierungsaktion immer unglaublich freue:
-20 Globale Variablen zum Array gemacht
-5 Arrays zu einer LL mit Structure konvertiert
-Hauptschleife ist jetzt Select und nicht mehr IF
-Goto/Gosub => Procedure
-LLs benutzt, statt mit 5 Hilfsvariablen zu arbeiten
-Aus 50 Zeilen Code 17 gemacht und ganz nebenbei die Performance um 50% gesteigert...
-usw.
Das kennt ihr ja, all solche Geschichten (diese hier sind nur erfunden).
Da wundert es mich eigentlich schon fast, dass mein 3.000 Zeiler überhaupt noch arbeitet, obwohl so viele "alte" Programmierweisen auf "neue Technologien" treffen... :oops: :roll:

Nee, ich glaube, ich nehm in diesem Fall besser Procedure. 8)

Verfasst: 31.07.2006 06:18
von edel
Kaeru Gaman hat geschrieben:wenn du einen bestimmten aufruf per Button UND bei einem anderen ereignis machen willst, dann arbeite mit einem (globalen) Flag:

- wenn der Button gedrückt wird, setzt du das Flag

- wenn die andere Bedingung erfüllt ist, setzt du das Flag
das ist das, wo du dein sendmessage machen wolltest

- wenn das flag gesetzt ist, reagierst du drauf, wie du vorher auf den Button reagiert hast
und hier musst du das Flag auch wieder löschen
Bei einem Control sicherlich machbar , bei vielen wird das so nix, zumindest
leidet der Code darunter.Ich wuerd da eher Setwindowlong mit gwl_userdata
nehmen, bei pb 4.0 geht es auch mit Setgadgetdata.

Was das Sendmessage Problem betrifft ist das vielleicht eine Moeglichkeit:

Code: Alles auswählen

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

Enumeration 
  #Fenster
EndEnumeration 

Enumeration 
  #Button0
  #Button1
EndEnumeration 

OpenWindow(#Fenster,#PB_Ignore,#PB_Ignore,600,480,"Andi - Convert")

CreateGadgetList(WindowID(#Fenster))

ButtonGadget(#Button0,10,10,100,100,"Linke Maustaste")
ButtonGadget(#Button1,110,10,100,100,"Rechte Maustaste")


Repeat
  
  event = WaitWindowEvent()
  
  If event = #PB_Event_Gadget
    If EventGadget() = #Button0
      MessageRequester("","links")
    ElseIf EventGadget() = #Button1
      MessageRequester("","rechts")
    EndIf      
  EndIf
  
  If event = #WM_LBUTTONUP
    PostMessage_(WindowID(#Fenster),#WM_COMMAND,MAKELONG(#Button0,#BN_CLICKED),GadgetID(#Button0))
  ElseIf event = #WM_RBUTTONUP
    PostMessage_(WindowID(#Fenster),#WM_COMMAND,MAKELONG(#Button1,#BN_CLICKED),GadgetID(#Button1))
  EndIf
  
  
Until event = #WM_CLOSE