| |
|
|
Bernd Lies | Problem: Der Anwender bearbeitet im Hptprg. Funktionen (hier: Auswahl von Fragen und deren Beantwortung). Parallel dazu soll in einer Statuszeile die analoge Zeit (60 Min.) bei Start der Auswahl der Fragen auf Null laufen. Ist die Zeit auf Null so soll das Hptprg. mit einm Hinweis geschlossen werden. |
|
|
| |
|
|
|
Julian Schmidt | Willst du eine Analog- oder Digitalanzeige? Hier ein Beispiel mit rückläufiger Zeit und Digitalanzeige und 24h-Format.
|
|
|
| |
|
|
|
maroro | Programmierung Grundlagen
Alle meine Programme haben ein grundlegendes Schema.
Als erstes werden die Grundlagen gelegt Variablen Arrays Ini-Datei lesen.
Dann wird das Fenster aufgebaut Listboxen Buttons etc.
Jetzt kommt eine Schleife oder Loop in der/dem die Nutzereingaben abgefangen werden.
Von dort wird zu den einzelnen Aktionen verzweigt.
Folgt dein Programm auch diesem Muster? |
|
|
| |
|
|
|
H.Brill | Da du ja XProfanX2 hast, würde ich die Uhr in einem Prozess laufen lassen. Siehe :
Multiprozessing mit XProfan und die Proc SetTitleTime
Da man auch prozess-übergreifend auf Controls Zugriff hat, könntest du bei Ablauf der Zeit reagieren, z.B. mit Sendkey was an einen Button schicken, oder über FileMap usw. Roland hat es ja in der Hilfe sehr gut beschrieben.
Könnte dann etwa so aussehen (hier mal mit einem Hotkey Taste Pause) gemacht :
Declare Btn1&, Btn2&, edit1&, text1&
WindowTitle "Mein Fenster"
Window 600, 400
Btn1& = @Create("Button", %HWnd, "Ende", 5, 10, 60, 25)
Btn2& = @Create("Button", %HWnd, "Start Watch", 80, 10, 100, 25)
text1& = @Create("Text", %HWnd, "Eingabe : ", 5, 40, 80, 25)
edit1& = @Create("Edit", %HWnd, "", 85, 40, 120, 25)
AddHotkey 1001, 19, 0' Pause - Taste
WhileNot @Clicked(Btn1&)
WaitInput
If @Clicked(Btn2&)
pExec("|StartWatch", %HWnd, 1)
EndIf
If MenuItem(1001)
Messagebox("Die Zeit ist abgelaufen","MELDUNG",0)
EndIf
Case %Key = 2 : Break' Schließen-Kreuz abfragen
EndWhile
End
Proc StartWatch
Parameters handle&, c&
Declare d&, h&, m&, s&, t&
Var ende% = 0
t& = &GetTickCount
WhileNot ende%
d& = (c& * 60000)-(&gettickcount - t&) + 1000
h& = (d& mod 86400000) /3600000
m& = (d& mod 3600000) / 60000
s& = (d& mod 60000) / 1000
Settext handle&, Str$(h&) + "h; " + Str$(m&) + "m; "+Str$(s&)+"s"
case getText$(handle&) = "" : ende% = 1
If (d& <= 0)
SendKey(handle&, 19)
ende% = 1
EndIf
EndWhile
EndProc
|
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 01.01.2014 ▲ |
|
|
|
|
Bernd Lies | Die Antworten mit dem Erstellen einer Analog- oder Digitaluhr sind o.k. Mein Problem ist die Einbindung in meinem Prgramm. D. h. wo genau müssen die Befehle rein: als Proc oder ????. Mein Programm steht und funktioniert super. Leider eben nicht mit der Uhr. |
|
|
| |
|
|
|
Julian Schmidt | Maroro schrieb es bereits.
maroro (Unbekannt)
Mach nicht den Fehler und versuche es einfach reinzukopieren ... versuche lieber die funktionsweise zu verstehen so das du es selbst schreiben kannst.
Ich hoffe du nimmst dir Das zu Herzen. |
|
|
| |
|
|
|
H.Brill | Habs deswegen oben extra als Proc ausgelegt, daß du es besser in deinem Programm benutzen kannst. Ich hab ja nur zum besseren Verständnis ein Programm drumherum gebastelt, bzw. damit du es testen kannst. Wenn dein Programm schon soweit steht fertig ist, weißt du ja bestimmt, was Procs sind bzw. wie sie einzubinden sind. Ich gehe deshalb mal davon aus, daß du nicht ganz am Anfang mit dem Programmieren mit XProfan stehst.
Also nochmal : Im Hauptprogramm habe ich einen Hotkey (AddHotkey) definiert. Wenn die Pause-Taste nun gedrückt wird, sei es nun per Hand auf der Tastatur oder simuliert mit Sendkey, wird ein Menü-Item aktiviert. Das funktioniert genauso, als wären Menüpunkte in deinem Programm vorhanden. Mit AddHotkey wird das als Ereignis verknüpft. Wenn es auftritt, wird eine Messagebox gezeigt.
Im Unterprogramm (Proc) sende ich eben diesen Tastaturdruck mit Sendkey an das Hauptprogrammfenster, wenn die Zeit abgelaufen ist.
Lese doch bitte in der Hilfe die Themen Multiprozessing und auch Hotkeys und schaue dir die Beispiele an. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 03.01.2014 ▲ |
|
|
|
|
Bernd Lies | Vielen Dank an Alle. Habe mich mit dem Code von H.Brill auseinander gesetzt und mit der Xprofan-Hilfe verstanden. Habe dann selbst einen Code in mein Programm programmiert (natürlich ab und an auf den Code von H.Brill geschaut) und es läuft Super. Nochmals Danke für die Hilfe |
|
|
| |
|
|
|
H.Brill | Na dann bin ich ja froh, daß ich etwas Lehrreiches weitergeben konnte. Hab hier noch was für Einsteiger : Oftmals muß man als Einsteiger die Hilfe durchforsten, um ein GUI-Programmgerüst zusammen zu bauen. Man weiß zwar in etwa, wie es geht, muß aber trotzdem immer wieder nachschauen, hauptsächlich, was die Programmschelife etc. betrifft. Für die Benutzer des mit XProfan gelieferten XProfed (Editor), habe ich folgenden Code :
WindowTitle "Programm - Gerüst"
Window 640, 400
ClearClip
Print "Gerüst wird geschrieben...."
PutClip "'$I ' Hier können .inc Dateien eingebunden werden" + Chr$(13)
PutClip "WindowTitle " + Chr$(34) + "Mein Fenster" + Chr$(34) + Chr$(13)
PutClip "Window 640, 400" + Chr$(13)
PutClip "Declare ende%, Btn1&, Btn2&" + Chr$(13)
PutClip "' Hier werden die Dialogelemente definiert" + Chr$(13)
PutClip "Btn1& = @Create(" + Chr$(34) + "Button" + Chr$(34) + ", %HWnd," + Chr$(34) + "Ende" + Chr$(34) + ", 10, 10, 60, 25)" + Chr$(13)
PutClip "Btn2& = @Create(" + Chr$(34) + "Button" + Chr$(34) + ", %HWnd," + Chr$(34) + "Mach was" + Chr$(34) + ", 100, 10, 80, 25)" + Chr$(13)
PutClip "ende% = 0" + Chr$(13)
PutClip "' Hier kommt die Ereignis - Schleife" + Chr$(13)
PutClip "WhileNot ende%" + Chr$(13)
PutClip " WaitInput" + Chr$(13)
PutClip " If @Clicked(Btn1&)" + Chr$(13)
PutClip " ende% = 1" + Chr$(13)
PutClip " ElseIf @Clicked(Btn2&)" + Chr$(13)
PutClip " MachWas()" + Chr$(13)
PutClip " EndIf" + Chr$(13)
PutClip " Case %Key = 2 : ende% = 1 ' Schließen-Kreuz abfragen" + Chr$(13)
PutClip "EndWhile" + Chr$(13)
PutClip "' Hier können die Procs für das Programm geschrieben werden" + Chr$(13)
PutClip "Proc MachWas" + Chr$(13)
PutClip " MessageBox(" + Chr$(34) + "Hallo" + Chr$(34) + ", " + Chr$(34) + "Info" + Chr$(34) + ", 0)" + Chr$(13)
PutClip "EndProc" + Chr$(13)
PutClip "End" + Chr$(13)
Print "Quellcode kann aus Zwischenablage kopiert werden !"
Print "Zum Beenden Taste drücken !"
WaitKey
End
Wenn man diesen compilert (.exe erstellen) und ins Benutzer-Menü einbindet, kann man schön mit -Bearbeiten + Einfügen oder halt mit STRG-V ein neues Programm anfangen. Die fehlenden Controls, wie Listboxen, Buttons usw. kann man dann nachher selber noch dazu schreiben oder vorhandene löschen bzw. austauschen. Wer will, kann sich auch obigen Code noch auf seine Bedürfnisse noch anpassen.
Evtl. ist es für den einen oder anderen nützlich. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 09.01.2014 ▲ |
|
|
|
|
Julian Schmidt | Dazu noch ein Tipp von mir.
Ich nutze das Programm ac'tivAid [...] mit der Erweiterung "Hotstrings" welche dafür sorgt, dass von mir eingegebene Texte/Abkürzungen automatisch durch von mir eingebene Text ersetzt werden. So hab ich mir verschiedene Textbausteine angelegt, z.B wird bei Eingabe von #txt dieser Text durch ein Beispiel-Edit ersetzt, ebenso bei #cmd durch einen Button usw...Das nimmt einen schon viel Arbeit ab und ist für Anfänger absolut zu empfehlen.
In ac'tivAid gibt es noch viele andere nützliche Tools/Erweiterungen, einfach mal die Liste durchgehen. Es ist wohl für jeden was dabei. |
|
|
| |
|
|
|
Bernd Lies | Danke, werde ich benutzen bzw. mir das Programm ansehen. |
|
|
| |
|
|