| |
|
|
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 | |
|
| |
|
|
|
| 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 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). |
|
|
| |
|
|
|
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 |
|
|
| 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: KompilierenMarkierenSeparierenWINDOWSTYLE 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
|
|
|
| |
|
|
|
| UPS...
Habe Andreass API ganz übersehen! Über das Handle gehts natürlich auch ohne Rechnerei! |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
Rolf Koch | Hi AH, nagut hast mich überredet Rolf |
|
|
| |
|
|
|
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 $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 ▲ |
|
|
|