Einsteigerfragen zur PROFAN Programmierung
  Suchen
 Zurück zur Übersicht
 AutorThema: Fenster, Nebenfenster öffnen und schließen (!) mit Parameter
Frank Sappert
Datum:24.09.02 15:12 Antwortenals Email verschicken (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.


Martin Pohl
Datum:24.09.02 15:42 Antwortenals Email verschicken (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


Frank Sappert
Datum:24.09.02 18:03 Antwortenals Email verschicken (frank.sappert@t-online.de) 


Vielen Dank!!!
Ich werd's direkt mal ausprobieren.
Grüße, Frank


Frank Sappert
Datum:24.09.02 20:07 Antwortenals Email verschicken (frank.sappert@t-online.de) 


2 Fehlermeldungen:

Keine Zahl: MENU1 (Zeile 30: Let MenuAntwort%=Menu1
While fehlt (Zeile 36: EndWhile


Martin Pohl
Datum:24.09.02 20:56 Antwortenals Email verschicken (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


Frank Sappert
Datum:24.09.02 21:26 Antwortenals Email verschicken (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.


Frank Sappert
Datum:24.09.02 21:35 Antwortenals Email verschicken (frank.sappert@t-online.de) 


Sorry: Zeile 16: PROC fehlt!
Habe Menu1Ende% im Hauptfenster auch declariert: keine Declarations-Fehlermeldung mehr.


Martin Pohl
Datum:25.09.02 06:31 Antwortenals Email verschicken (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


Frank Sappert
Datum:25.09.02 16:23 Antwortenals Email verschicken (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




Jörg Sellmeyer
Datum:25.09.02 23:25 Antwortenals Email verschicken (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


Frank Sappert
Datum:26.09.02 21:05 Antwortenals Email verschicken (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


Jörg Sellmeyer
Datum:26.09.02 22:16 Antwortenals Email verschicken (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


Frank Sappert
Datum: 26.09.02 22:39 Antwortenals Email verschicken (frank.sappert@t-online.de) 


Danke, Jörg!
Jetzt habe ich es verstanden.
Grüße, Frank.


 Zurück zur Übersicht
 

 Ein kostenloses WebMart Forum
WebMart Homepage Tools kostenlos
doteu.info: Don´t miss your .eu-Domain