Einsteigerfragen zur PROFAN Programmierung

| Suchen
| Zurück zur Übersicht

Autor | Thema: Fenster, Nebenfenster öffnen und schließen (!) mit Parameter
Frank Sappert
| 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.
Martin Pohl
| 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
Frank Sappert
| Datum:24.09.02 18:03 (frank.sappert@t-online.de) |
Vielen Dank!!! Ich werd's direkt mal ausprobieren. Grüße, Frank
Frank Sappert
| 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
Martin Pohl
| 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
Frank Sappert
| 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.
Frank Sappert
| 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.
Martin Pohl
| 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
Frank Sappert
| 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
Jörg Sellmeyer
| 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
Frank Sappert
| 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
Jörg Sellmeyer
| 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
Frank Sappert
| Datum: 26.09.02 22:39 (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 |