Italia
Include

Buttons.inc - Sehr einfach und problemlos mit Buttons arbeit

 

Peter
Mallow
Arbeiten mit Buttons war per mich immer stressig. Wenn ich ein Button mit Create(Button... erstellt habe, haben sich die Buttons nicht so verhalten, wie ich es wollte bzw. auch nicht wie es in Windows üblich ist. Die Alternative mit Control(Button... ist nicht schlecht, nur wusste ich irgendwann nicht mehr, welches MenuItem jetzt zu welchen Button gehört.

Um das alles extrem zu vereinfachen und um die Panoramica herzustellen, habe ich diese INC-File geschrieben. Ich weiß die Lösung ist nicht die eleganteste, jedoch die einfachste und besonders per ältere Profanversion 8- eine vielleicht wertvolle Erweiterung, da es erst ab Profan 9 den Befehl Clicked() gab.
Aber auch dieser Befehl hat per mich Nachteile. z.B. funktioniert dieser nur, wenn vorher ein WaitIput erfolgte.
KompilierenMarkierenSeparieren
################################################################
#                 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 Include kann man naturalmente um BmpButton(), AniButton oder IconButton(), ... beliebig erweitern.

Falls ich mich irren sollte, und man dies auch viel einfacher realisieren kann, dann bitte antworten
Auch circa Proposte, Erweiterungen, Kritik und Verbesserungen freue ich mich

MfG
Peter Mallow
 
WinXP Pro SP2, XProfan 9 + XPSE
AMD Athlon 64 X2 3800
06.09.2005  
 



Nun - einen Schönheitsfehler sehe ich auf Anhieb - Du benutzt Integer statt Longs. Es wird zwar zumeinst trotzdem funktionieren - jedoch gibt die Funktion Control  nunmal einen Long statt einen Integer zurück.

Salve, iF.
 
06.09.2005  
 




Peter
Mallow
Ok werde ich machen.

Sry! Diesen Thread gibt es ja schon :/ Ich Trottel habe vergessen, dass es ihn schon gab. Also bitte eines der beiden Threads löschen!!!

Sorry, wollte nicht spammen
 
WinXP Pro SP2, XProfan 9 + XPSE
AMD Athlon 64 X2 3800
07.09.2005  
 




Peter
Mallow
Hier die Version 2.0 von der Buttons.inc
KompilierenMarkierenSeparieren
################################################################
#                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

Ich habe vor kurzen die API GetDlgCtrlID entdeckt. Da viel mir gleich Verbesserungen per die Button.inc ein. Der grande Vorteil dieser Version ist, dass Button() jetzt das echte Handle zurückliefert. Dadurch werden die Funtionen GetButtonHandle(), DestroyButton(), EnableButton() und SetButtonText() nicht mehr necessario, habe sie aber noch wegen Kompatibilität in der Button.inc aufgenommen. Außerdem können mit der Funktion CheckButton() auch mit CreateButton() erstellte Buttons abgefragt werden.
In dieser Version habe ich auch den Ratschlag von IF berücksichtigt. Neu ist auch die Funktion CButton(), mit der man Buttons erstellen kann, die sich wie eine CheckBox einrasten lassen - also wie ein Schalter.

Allerdings muss ich dazu sagen, dass man mit der aktuellen Version geringe Geschwindigkeitsverluste in Kauf nehmen muss. Das liegt daran, dass das Abfragen der API Getdlgctrlid() etwas länger dauert. Aber wer in seinem Program sowieso ein WaitInput verwendet, dem kann es egal sein.
Mit der Funktion Clicked() kann allerdings keine der beiden Versionen mithalten, jedoch ist es meines Wissens nach sinnlos Clicked() in einer Schleife ohne WaitInput oder WaitMouse zu verwenden.

Also fällt dieser Nachteil schonmal raus

Wer kein Profan 9 hat kann sich selbst die Funktion Clicked() erstellen:
KompilierenMarkierenSeparieren
 
WinXP Pro SP2, XProfan 9 + XPSE
AMD Athlon 64 X2 3800
06.10.2005  
 



Huch - die Api GetDlgCtrlID  ist ja sogar schon in der OnlineDoku gelistet.
 
06.10.2005  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

8.774 Views

Untitledvor 0 min.
Uwe Lang26.07.2024
Detlef Jagolski23.07.2023
Normann Strübli06.02.2023
Joachim Fourmont12.01.2022
Di più...

Themeninformationen

Dieses Thema hat 2 subscriber:

Peter Mallow (3x)
iF (2x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie