Deutsch
Forum

Buttonclick abfragen

 

Thorsten
Friedrichs
Hallo,

wie fragt man am sichersten ab ob ein Button [create(button...)] angeklickt wurde?

Gruß
Thorsten
 
------------------------------------------------------------------------------------------
XProfan 9/Win98&undWinXP/PRFellow/ TCP.DLL
Profaner seit 4.5 /einige Jahre (mit Programmierpausen)
04.10.2004  
 




Rolf
Koch
Hi Thorsten,

im normalfall natürlich per
KompilierenMarkierenSeparieren
Rolf
 
04.10.2004  
 



Hallo Rolf...

Ich denke mal, genau das wollte er nicht haben. @GETFOCUS liefert nur zurück, ob ein Button einen Focus hat, nicht ob er gedrückt wurde.
Ich nehme dazu:
KompilierenMarkierenSeparieren
If @gt(@sendmessage(Button_1%,$00F2,0,0),40)

    ...

ElseIf @gt(@sendmessage(Button_2%,$00F2,0,0),40)

    ...

ENDIF


Noch besser wäre es, den Button über @CONTROL selbst zu erzeugen und mit einer ID zu versehen. Diese ID kann man dann über %MENUITEM abfragen und mit SETMENUITEM 0 wieder zurücksetzen (Beispielcode hier im Forum unter Quellcodes).
 
04.10.2004  
 




Andreas
Miethe


[quote:3cde066f52=AH]
Noch besser wäre es, den Button über @CONTROL selbst zu erzeugen und mit einer ID zu versehen. Diese ID kann man dann über %MENUITEM abfragen und mit SETMENUITEM 0
wieder zurücksetzen (Beispielcode hier im Forum unter Quellcodes).[/quote:3cde066f52]
Das geht auch mit Create(Button...), eine ID bekommt der Button auch. Angefangen bei 1000 werden die einzelnen Controls die mit Create(..) erstellt werden mit einer aufsteigenden ID versehen.

Beispiel :
KompilierenMarkierenSeparieren
 $H windows.ph
Declare Ende&,Button&
cls
Button& = Create("BUTTON",%hwnd,"OK",10,10,80,24)

Whilenot ende&

    Waitinput

    If ~GetDlgItem(%hwnd,%MenuItem*-1) = Button&

        Print "Hoppla"

    Endif

wend

 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
04.10.2004  
 



Hallo Andreas...

Vollkommen richtig! Bloß kommt dann etwas Rechnerei dazu - besonders wenn man sehr viele Buttons in seinem Programm erstellt hat und zusätzlich noch mit @CREATETEXT arbeitet wird das ganze sehr unübersichtlich. Mit @CONTROL läßt sich jedem Control eine spezielle ID zuweisen, mit @CREATEBUTTON wird dies automatisch von Profan getan (aufsteigende IDs ab 2000 werden vergeben, wenn ich mich recht erinnere).
Hier noch mal was zur Demonstration aus meiner Kramkiste:
KompilierenMarkierenSeparieren
WINDOWSTYLE 31
WINDOWTITLE "Hauptprogramm"
WINDOW 0,0-640,440
Declare DIALOG&,Button&,message&,Window&,Dialogtext$,ENDE&,Zeit$,Zähler&
Declare Listbox&

PROC Messagefenster

    PARAMETERS Überschrift$,Text$ Überschrift$ identifiziert das geschlossene Fenster, Text$ ist ein Meldungstext
    WINDOWSTYLE 16 Fenster ohne Menü
    Am Aussehen läßt sich bestimmt noch eine Menge verbessern..
    Let Dialogtext$="Hinweis von Hauptprogramm " Wichtig, um zu erkennen, ob ein Dialogfensterbutton gedrückt wurde
    LET DIALOG&=@Create("Window",%Desktop,@add$(Dialogtext$,Überschrift$),0,0,300,110) Erstellung des Dialoges auf dem Desktop
    @Create("Button",Dialog&,"OK",100,50,80,25) Button zum Wegklicken
    @create("Text",,Dialog&,TEXT$,0,0,300,40) Meldungstext
    SetWindowPos Dialog&=@rnd(@sub(%MAXX,300)),@rnd(@sub(%MAXY,110))-300,110;-1 Dialgfenster immer im Vordergrund

endproc

Jetzt kommt das Hauptprogramm
LET LISTBOX&=@Create("Listbox",%HWND,"",10,160,600,100) Für die Rückmeldung
LET ENDE&=@Create("Button",%HWND,"Ende",230,350,100,25) Button schadet nichts

WHILENOT @GETFOCUS(ENDE&) Solange nicht Ende gedrückt wurde

    If @gt(@Height(%HWND),20) Nur, wenn das Hauptfenster ncht minimiert ist...

        Drawtext 0,100,@add$(@str$(&GETTICKCOUNT),"        ") Nur, damit man sieht, daß das Programm weiterläuft.
        Drawtext 0,0,@add$(@str$(%MENUITEM),"        ") Nur für mich, ist unwichtig!

    endif

    IF @neq$(Zeit$,Time$(0)) Jede Minute wird ein Popup erzeugt!

        LET ZÄHLER&=ZÄHLER&+1 Das ist für den Dialog-Fenstertitel
        LET ZEIT$=TIME$(0) Damit das Programm merkt, das eine Minute vergangen ist.
        Messagefenster @str$(Zähler&), @add$("Aktuelle Zeit: ",Zeit$) Prozedur zum Erzeugen des Dialoges wird aufgerufen.

    endif

    IF @lt(%MENUITEM,-999) Wenn irgendwo ein Button gedrückt wurde..

        LET WINDOW&=@getactivewindow() Holt sich das Handle des Fensters mit dem gedrückten Button.

        IF @gt(@len(@GetText$(WINDOW&)),@sub(@len(Dialogtext$),1)) Damits bei der nächsten Abfrage keinen Fehler gibt!

            IF @equ$(@mid$(@GetText$(WINDOW&),1,@len(Dialogtext$)),Dialogtext$) Wenn das dann ein Dialogfenster deines Programmes ist..

                @addstring(Listbox&,@GetText$(WINDOW&)+" um "+@time$(0)+" Uhr weggeklickt!") Schreibt in die Listbox das weggeklickte Fenster.
                @destroywindow(Window&) Löscht das Dialogfenster
                setmenuitem 0 Zurücksetzen des Buttonklicks

            endif

        endif

    endif

wend

 
04.10.2004  
 



UPS...

Habe Andreass API ganz übersehen! Über das Handle gehts natürlich auch ohne Rechnerei!
 
04.10.2004  
 




Uwe
''Pascal''
Niemeier
Hallo Leute!

Auf die Gefahr hin, mich zu blamieren...
Bei mir funktioniert im Normalfall (Eingabeschleife mit WaitInput, aber ohne Timer o.ä.) dies:

def GetFocusEx(1) getfocus(&(1))*(%key=255)

Damit kann man auch per <Tab> den Focus weitergeben und mit <Enter> quittieren.

SeeYou
Pascal
 
04.10.2004  
 




Rolf
Koch
Hi AH,
nagut hast mich überredet
Rolf
 
04.10.2004  
 




Thorsten
Friedrichs
[quote:5c933acd40=AH]Hallo Rolf...

Ich denke mal, genau das wollte er nicht haben. @GETFOCUS liefert nur zurück, ob ein Button einen Focus hat, nicht ob er gedrückt wurde.
Ich nehme dazu:
KompilierenMarkierenSeparieren
If @gt(@sendmessage(Button_1%,$00F2,0,0),40)

    ...

ElseIf @gt(@sendmessage(Button_2%,$00F2,0,0),40)

    ...

ENDIF


$H windows.ph
Declare Ende&,Button&
cls
Button& = Create(BUTTON,%hwnd,OK,10,10,80,24)
Whilenot ende&
Waitinput
If ~GetDlgItem(%hwnd,%MenuItem*-1) = Button&
Print Hoppla
Endif
wend
[/quote:5c933acd40]
Hi, genau dass. Es sollte nicht mit Getfocus arbeiten und auch wenn möglich ohne Waitinput.
Also danke für diese beiden Vorschläge. Ich hab schon lange nichts mehr mit Profan gemacht, wußte aber noch, das getfocus nicht richtig klappt.

Danke für die Hilfe.
Thorsten
Nachtrag von iF: ich hab das Doppelposting mal beseitigt...
 
------------------------------------------------------------------------------------------
XProfan 9/Win98&undWinXP/PRFellow/ TCP.DLL
Profaner seit 4.5 /einige Jahre (mit Programmierpausen)
04.10.2004  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.985 Betrachtungen

Unbenanntvor 0 min.
H.Brill10.01.2019
Ernst12.03.2014
boh128.03.2013
Michaeal18.10.2012
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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