| |
|
|
Peter Mallow | Arbeiten con Buttons war para mich siempre stressig. Wenn Yo una Button con Crear(Button... erstellt habe, haben el Buttons no así comportamiento, Yo lo quería o. auch no como en Windows üblich es. El Alternative con Control(Button... es no schlecht, sólo wusste Yo irgendwann no mehr, welches MenuItem ahora a welchen Button gehört.
Um el alles extremo a vereinfachen y a Información general herzustellen, Yo esta INC-File geschrieben. Yo weiß el Solución es no el eleganteste, sin embargo el einfachste y besonders para ältere Profanversion 8- una tal vez wertvolle Erweiterung, como lo sólo de Profano 9 el Befehl Clicked() gab. Aber auch dieser Befehl ha para mich Nachteile. z.B. funktioniert dieser sólo, si vorher una WaitIput erfolgte. KompilierenMarcaSeparación################################################################
# BUTTONS.INC Version 1.2 #
#==============================================================#
# Erleichtert extrem die Buttonverwaltung im Programm #
# #
# C o p y r i g h t 2 0 0 5 b y P e t e r M a l l o w #
################################################################
Def @LoadImage(6) !"USER32","LoadImageA"
Def @ALoadImage(6) ! "USER32","LoadImageA"
Def @ExtractIcon(3) ! "SHELL32","ExtractIconA"
Declare ButtonID%,MerkeButton%[100] MerkeButton%[100] Merkt sich das Buttonhandle, Max 100 Buttons (standart)
Proc Button
Parameters Handle%,ButtonText$,X1%,Y1%,X2%,Y2%
Button wird erstellt. Diese Procedure hat die gleichen
Parameter wie CreateButton.
Inc ButtonID%
MerkeButton%[ButtonID%] = @Control("Button",ButtonText$,$40000000+$10000000,X1%,Y1%,X2%,Y2%,Handle%,ButtonID%+4000,%HINSTANCE)
Return ButtonID%
EndProc
Proc CheckButton
Parameters Button%
Diese Funktion gibt True zurück, wenn der Button% geklickt
wurde. PRAKTISCH ist, dass nach der Ausführung dieser Procedure
der MenuItem-Status wieder auf 0 gesetzt wird.
If Button%=0
Return 0
ElseIf @Abs(%MenuItem)=Button%+4000
SetMenuItem 0
Return 1
Else
Return 0
EndIf
EndProc
Proc GetButtonHandle
Parameters Button%
Diese Funktion liefert den echten Handle vom Button zurück.
Damit kann dann jede beliebige Funktion wie "DestroyWindow"
normal angesteuert werden:
Bsp. -> DestroyWindow(GetButtonHandle(Button%))
Return MerkeButton%[Button%]
EndProc
Proc DestroyButton
Parameters Button%
Die Buttons, die mit der Procedure "Button" erstellt werden,
die können nur mit dieser Funktion zerstrört werden oder Sie
verwenden: -> DestroyButton(MerkeButton%[ButtonHandel%]) <-
DestroyWindow(MerkeButton%[Button%])
EndProc
Proc EnableButton
Parameters Button%, Type%
Die Buttons, die mit der Procedure "Button" erstellt werden,
die können nur mit dieser Funktion zerstrört werden oder Sie
verwenden: -> EnableWindow MerkeButton%[ButtonHandel%],0 <-
EnableWindow MerkeButton%[Button%],Type%
EndProc
Proc SetButtonText
Parameters Button%, String$
Die Buttons, die mit der Procedure "Button" erstellt werden,
die können nur mit dieser Funktion zerstrört werden oder Sie
verwenden: -> EnableWindow MerkeButton%[ButtonHandel%],0 <-
SetText MerkeButton%[Button%]ng$
ENDPROC
Diese Incluir puede ser natürlich en BmpButton(), AniButton oder IconButton(), ... cualquier erweitern.
Falls Yo mich irren debería, y uno dies auch viel einfacher realisieren kann, entonces Por favor, antworten Auch encima Propuestas, Erweiterungen, Kritik y Verbesserungen freue Yo mich
MfG Peter Mallow |
|
|
| WinXP Pro SP2, XProfan 9 + XPSE AMD Athlon 64 X2 3800 | 06.09.2005 ▲ |
|
|
|
|
| Nun - una Schönheitsfehler sehe I Anhieb - Usted benutzt Integer en lugar de Longs. Lo se zwar zumeinst trotzdem trabajo - sin embargo son el Función Control nunmal una Largo en lugar de una Integer zurück.
Salve, IF. |
|
|
| |
|
|
|
Peter Mallow | Ok voluntad Yo hacer.
Sry! Diesen Hilo hay sí ya :/ Yo Trottel habe vergessen, dass lo ihn ya gab. Also Por favor, uno el beiden Hilos löschen!!!
Sorry, quería no spammen |
|
|
| WinXP Pro SP2, XProfan 9 + XPSE AMD Athlon 64 X2 3800 | 07.09.2005 ▲ |
|
|
|
|
Peter Mallow | Hier el Versión 2.0 de el Buttons.inc KompilierenMarcaSeparación################################################################
# BUTTONS.INC Version 2.0 #
#==============================================================#
# Erleichtert extrem die Buttonverwaltung im Programm #
# #
# C o p y r i g h t 2 0 0 5 b y P e t e r M a l l o w #
################################################################
Def @LoadImage(6) !"USER32","LoadImageA"
Def @ALoadImage(6) !"USER32","LoadImageA"
Def @ExtractIcon(3) !"SHELL32","ExtractIconA"
Def @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID" Par: Handle; Return %MenuItem
Declare ButtonID%,bmp#
ButtonID% = 4000 Startwert
Proc CheckButton
Parameters b&
Diese Funktion gibt True zurück, wenn der Button% geklickt
wurde. PRAKTISCH ist, dass nach der Ausführung dieser Procedure
der MenuItem-Status wieder auf 0 gesetzt wird.
If (@Abs(%MenuItem) = @GetDlgCtrlID(b&)) And (b& > 0)
SetMenuItem 0
Return 1
Else
Return 0
EndIf
EndProc
Proc CButton ein Button als Checkbox
Parameters Wnd&,t$,X%,Y%,SizeX%,SizeY%
Inc ButtonID%
Return @Control("Button",t$,$50001000+3,X%,Y%,SizeX%,SizeY%,Wnd&,ButtonID%,%Hinstance)
EndProc
----------------------------------------------------------------------
- Folgende Funktionen und Prozeduren sind nur noch zu Kompatibilität -
- zur alten Version von der Button.inc vorhanden. --------------------
----------------------------------------------------------------------
Proc Button
Parameters Wnd&,t$,X1%,Y1%,X2%,Y2%
Inc ButtonID%
Return @Control("Button",t$,$50000000,X1%,Y1%,X2%,Y2%,Wnd&,ButtonID%,%HInstance)
EndProc
Proc GetButtonHandle
Parameters Button&
Return Button&
EndProc
Proc DestroyButton
Parameters Button&
@DestroyWindow(Button&)
EndProc
Proc EnableButton
Parameters Button&,t%
EnableWindow @Button&,t%
EndProc
Proc SetButtonText
Parameters Button&,t$
SetText Button ENDPROC
Yo habe antes kurzen el API GetDlgCtrlID entdeckt. Como viel me igual Verbesserungen para el Button.inc una. Der große Vorteil dieser Versión es, dass Button() ahora el echte Handle zurückliefert. Dadurch voluntad el Funtionen GetButtonHandle(), DestroyButton(), EnableButton() y SetButtonText() no mehr benötigt, habe ellos aber todavía wegen Kompatibilität en el Button.inc aufgenommen. Außerdem puede con el Función CheckButton() auch con CreateButton() erstellte Buttons abgefragt voluntad. In dieser Versión Yo auch el Ratschlag de IF berücksichtigt. Neu es auch el Función CButton(), con el uno Buttons redactar kann, que como una CheckBox einrasten dejar - Entonces, ¿cómo una Schalter.
Aunque muss Yo dazu sagen, dass uno con el aktuellen Versión geringe Geschwindigkeitsverluste en Kauf nehmen muss. Das liegt daran, dass el Abfragen el API Getdlgctrlid() algo länger dauert. Aber wer en seinem Program sowieso una WaitInput verwendet, el kann lo egal ser. Mit el Función Clicked() kann allerdings no el beiden Versionen mithalten, sin embargo es meines Wissens después de sinnlos Clicked() en uno Bucle sin WaitInput oder WaitMouse utilizarse.
Also fällt dieser Nachteil schonmal fuera
Wer kein Profano 9 ha kann se incluso el Función Clicked() redactar: KompilierenMarcaSeparación |
|
|
| WinXP Pro SP2, XProfan 9 + XPSE AMD Athlon 64 X2 3800 | 06.10.2005 ▲ |
|
|
|
|
| Huch - el sistema API GetDlgCtrlID es sí incluso ya en el OnlineDoku gelistet. |
|
|
| |
|
|