Autor | Thema: Fenster, Nebenfenster öffnen und schließen (!) mit Parameter | | Datum:24.09.02 15:12 
(frank.sappert@t-online.de) | |
Ich bin noch ein PROFAN-Neuling und komme einfach nicht weiter:
Folgende Aufgabenstellung:
1. Ein Hauptfenster mit Menue soll programmiert werden, Abruf des Menues über PROC (kriege ich hin)
2. In Abhängigkeit von der Menueauswahl soll jeweils ein Nebenfenster geöffnet werden. Dort soll eine Auswahl (z.B. Radiobuttons) und/oder Eingabe von Daten stattfinden. Die Parameter / Ergebnisse sollen in das Hauptfenster zur Berechnung übernommen werden.
3. Dabei soll das Nebenfenster geschlossen werden (komme hierbei auf keinen grünen Zweig!!!)
Bitte um Hilfe!!! (Schematischer Code wäre toll)
Grüße, Frank Sappert.
|
| | Datum:24.09.02 15:42 
(martin_pohl@msn.com) | |
Wenn du dein Hauptfenster hast, dann machst du so weiter:
Die Menüeinträge nummeriere ich hier mal schlicht mit den Ziffern 0 bis 2.
Proc Menu1
Declare Fenster%,Radio1%,Radio2%,Menu1Ende%
Let Menu1Ende%=1
Let Fenster%=@CreateWindow(%HWnd,"Fenster 1",50,50,200,150)
Let Radio1%=@CreateRadioButton(Fenster%,"1",4,4,100,20)
Let Radio2%=@CreateRadioButton(Fenster%,"2",4,28,100,20)
While Menu1Ende%
If @GetCheck(Radio1%)
Return 1
ElseIf @GetCheck(Radio2%)
Return 2
EndIf
EndWhile
EndProc
' Window bla, bla, bla
...
Declare MenuAntwort%
If @Equ(%Key,2)
End
ElseIf @MenuItem(0)
Let MenuAntwort%=Menu1
Case @Equ(MenuAntwort%,1):MessageBox "Der erste Radio wurde angeklickt","Radio",0
Case @Equ(MenuAntwort%,2):MessageBox "Der zweite Radio wurde angeklickt","Radio",0
ElseIf @MenuItem(1)
...
EndIf
EndWhile
|
| | | Datum:24.09.02 20:07 
(frank.sappert@t-online.de) | |
2 Fehlermeldungen:
Keine Zahl: MENU1 (Zeile 30: Let MenuAntwort%=Menu1
While fehlt (Zeile 36: EndWhile
|
| | Datum:24.09.02 20:56 
(martin_pohl@msn.com) | |
So, hier nochmal etwas verändert.
Proc Menu1
Declare Fenster%,Radio1%,Radio2%,Menu1Ende%
Let Menu1Ende%=1
Let Fenster%=@CreateWindow(%HWnd,"Fenster 1",50,50,200,150)
Let Radio1%=@CreateRadioButton(Fenster%,"1",4,4,100,20)
Let Radio2%=@CreateRadioButton(Fenster%,"2",4,28,100,20)
While Menu1Ende%
If @GetCheck(Radio1%)
Let Ergebnis%=1
Return Ergebnis%
ElseIf @GetCheck(Radio2%)
Let Ergebnis%=2
Return Ergebnis%
EndIf
EndWhile
EndProc
' Window bla, bla, bla
...
Declare Ergebnis%
While 1
WaitInput
If @Equ(%Key,2)
End
ElseIf @MenuItem(0)
Menu1
Case @Equ(Ergebnis%,1):MessageBox "Der erste Radio wurde angeklickt","Radio",0
Case @Equ(Ergebnis%,2):MessageBox "Der zweite Radio wurde angeklickt","Radio",0
ElseIf @MenuItem(1)
...
EndIf
EndWhile
|
| | Datum:24.09.02 21:26 
(frank.sappert@t-online.de) | |
Jetzt funktioniert es, aber:
Wenn Messagebox "ok" geklickt wird: Fehlermeldung Variable nicht declariert (Menu1Ende%, Zeile 7)
und Fehlermeldung EndProc fehlt (Zeile 16)
verstehe ich nicht, wurde doch declariert und EndProc ist auch da!
Außerdem: Fenster Menu1 soll nach der Abfrage wieder schließen!!!
Danke für Deine Bemühungen, Frank.
|
| | Datum:24.09.02 21:35 
(frank.sappert@t-online.de) | |
Sorry: Zeile 16: PROC fehlt!
Habe Menu1Ende% im Hauptfenster auch declariert: keine Declarations-Fehlermeldung mehr.
|
| | Datum:25.09.02 06:31 
(martin_pohl@msn.com) | |
Proc Menu1
Declare Fenster%,Radio1%,Radio2%
Let Fenster%=@CreateWindow(%HWnd,"Fenster 1",50,50,200,150)
Let Radio1%=@CreateRadioButton(Fenster%,"1",4,4,100,20)
Let Radio2%=@CreateRadioButton(Fenster%,"2",4,28,100,20)
While Menu1Ende%
If @GetCheck(Radio1%)
Let Ergebnis%=1
@DestroyWindow(Fenster%)
Return Ergebnis%
ElseIf @GetCheck(Radio2%)
Let Ergebnis%=2
@DestroyWindow(Fenster%)
Return Ergebnis%
EndIf
EndWhile
EndProc
' Window bla, bla, bla
...
Declare Ergebnis%
While 1
WaitInput
If @Equ(%Key,2)
End
ElseIf @MenuItem(0)
Menu1
Case @Equ(Ergebnis%,1):MessageBox "Der erste Radio wurde angeklickt","Radio",0
Case @Equ(Ergebnis%,2):MessageBox "Der zweite Radio wurde angeklickt","Radio",0
ElseIf @MenuItem(1)
...
EndIf
EndWhile
|
| | Datum:25.09.02 16:23 
(frank.sappert@t-online.de) | |
Die While/EndWhile Schleife funktioniert nicht richtig:
Nach Aufruf von PROC Menu1 durch Anklicken von "Datei, Auswahl" im Menue und Anklicken von "Salbe" springt das Programm zurück ins Hauptfenster und das Nebenfenster wird geschlossen. Soweit, sogut...
Aber: jetzt springt das Programm von EndWhile des Hauptmenues in die Zeile 9 (Beginn der While-Schleife von PROC Menu1) mit entsprechenden Fehlermeldungen!!!!!
hier das komplette Listing:
' NEBENFENSTER (TEST)
Proc Menu1
Declare Fenster%,Radio1%,Radio2%,Menu1Ende%
Let Menu1Ende% = 1
Let Fenster%=@CreateWindow(%HWnd,"Rezeptur: Auswahl",50,50,200,150)
Let Radio1%=@CreateRadioButton(Fenster%,"Salbe",4,4,100,20)
Let Radio2%=@CreateRadioButton(Fenster%,"Lösung",4,28,100,20)
While Menu1Ende%
If @GetCheck(Radio1%)
Let Ergebnis%=1
@DestroyWindow(Fenster%)
Return Ergebnis%
ElseIf @GetCheck(Radio2%)
Let Ergebnis%=2
@DestroyWindow(Fenster%)
Return Ergebnis%
EndIf
EndWhile
EndProc
' HAUPTFENSTER
WINDOWSTYLE 31
WINDOW 10,10-600,400
WINDOWTITLE "Menusteuerung"
POPUP "Datei"
AppendMenu 100,"&Auswahl"
AppendMenu 101,"&Ende"
POPUP "Bearbeiten"
Declare Ergebnis%
While 1
WaitInput
If @Equ(%Key,2)
End
ElseIf @MenuItem(100)
Menu1
Case @Equ(Ergebnis%,1):Print "Rezeptur: Salbe"
Case @Equ(Ergebnis%,2):MessageBox "Der zweite Radio wurde angeklickt","Radio",0
ElseIf @MenuItem(101)
End
EndIf
EndWhile
|
| | Datum:25.09.02 23:25 
(joerse@gmx.de) | |
Hallo Frank,
Ich zitiere mal aus der Profanhilfe:
WICHTIG: Auch wenn eine Prozedur mit RETURN verlassen wird, muß die Definition
der Prozedur mit ENDPROC abgeschlossen werden. Das Verlassen einer Prozedur
darf nicht innerhalb einer WHILE-Schleife erfolgen.
Also:
Proc Menu1
Declare Returnwert%
Declare Fenster%,Radio1%,Radio2%,Menu1Ende%
Let Menu1Ende% = 1
Let Fenster%=@CreateWindow(%HWnd,"Rezeptur: Auswahl",50,50,200,150)
Let Radio1%=@CreateRadioButton(Fenster%,"Salbe",4,4,100,20)
Let Radio2%=@CreateRadioButton(Fenster%,"Lösung",4,28,100,20)
While Menu1Ende%
If @GetCheck(Radio1%)
Let Returnwert%=1
ElseIf @GetCheck(Radio2%)
Let Returnwert%=2
EndIf
EndWhile
@DestroyWindow(Fenster%)
Return Returnwert%
EndProc
Cls
Declare Ergebnis%
...
Menu1
Let Ergebnis%=@%(0)
So kannst Du in der Prozedur unabhängig vom übrigen Programm Werte oder
Variablen verändern oder ergänzen. Die Zuweisung zu Ergebnis% läuft dann außerhalb
der Prozedur.
Gruß
Jörg
|
| | Datum:26.09.02 21:05 
(frank.sappert@t-online.de) | |
Hallo Jörg,
danke für den Hinweis, ich habe es auch gemerkt und entsprechend geändert.
Aber ich verstehe den Ausdruck "Let Ergebnis%=@%(0)" nicht!
Was soll die Null, und was wird hier zu Ergebnis% übertragen?
Grüße, Frank
|
| | Datum:26.09.02 22:16 
(joerse@gmx.de) | |
Hallo Frank,
Ich bin nicht sicher ab welcher Version diese Möglichkeit existiert.
Das steht dazu in der Profanhilfe:
>>
Retun <Wert>
Vorzeitoges Beenden einer Prozedur. Es ist möglich einen Wert zurückzugeben. Dieser steht dann in @$(0), @%(0), @&(0) und/oder @!(0):
PROC Test
Print "Das ist ein Test"
Return "OK!"
ENDPROC
Print "Im Hauptprogramm"
Test
Print "Wieder zurück! Ergebnis:",@$(0)
Der zurückgegebene Wert darf auch eine lokale Variable sein.
WICHTIG: Auch wenn eine Prozedur mit RETURN verlassen wird, muß die Definition der Prozedur mit ENDPROC abgeschlossen werden. Das Verlassen einer Prozedur darf nicht innerhalb einer WHILE-Schleife erfolgen.
<<
Der Wert den Return zurückgibt ist @$(0), wenn es ein String ist und entsprechend
des Variablentyps ein Longint @&(0) - Interger @%(0) oder Float @!(0).
Gruß
Jörg
|
| |
|