| |
|
|
- Seite 1 - |
|
Hubert Binnewies | Hallo zusammen,
Ich habe ein Proggi in Arbeit das schon knapp 1500 Zeilen lang ist. Nun hat das Proggi mehrere Fenster mit Buttons. Logischerweise setze ich nach der Fenstererstellung eine Whilenot Schleife in der der erste Befehl ein Waitinput ist. aber seltsamerweise wird das Waitinput permanent durchbrochen ohne das ich eine Aktion ausführe. Im Programm verwende ich keinen Timer, es ist zwar die Thread.pcu vorhanden, aber sie steckt in einem Proc-Endproc das nicht aufgerufen wird. und ansonsten weiss ich nicht womit das Waitinput von meinem Proggi durchbrochen werden kann. Hat einer ne Ahnung wie ich abfragen kann womit das Waitinput durchbrochen wurde??
Danke schonmal im voraus.
Hubert |
|
|
| WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 03.08.2006 ▲ |
|
|
|
|
| |
|
- Seite 1 - |
|
Hubert Binnewies | Ich habe mal weitergeforscht....
Also....in folgender Konstelation habe ich im speziellen das Problem: KompilierenMarkierenSeparierenDLGRhin&=CREATE("DIALOG",%HWND,"Rechner hinzufügen",22,20,400,330)
USEFONT "MS Sans Serif",13,0,0,0,0
SETDIALOGFONT 1
Def Cps(6) Control("STATIC",@$(2),$5400010E,@%(3),@%(4),@%(5),@%(6),@%(1),2000, %Hinstance)
Picstatic1&=Cps(DlgRhin&,"",0,0,Width(Dlg&),Height(Dlg&))
Pich1&=Create("hpic",-1,"IMGRHhintergrund.bmp")
Sendmessage(Picstatic1&,$172,0,Pich1&)
EDIT1& =@CREATE("EDIT",Picstatic1&,"",0050,0080,0285,0020)
EDIT2& =@CREATE("EDIT",Picstatic1&,"",0050,0140,0285,0020)
EDIT3& =@CREATE("EDIT",Picstatic1&,"",0050,0202,0285,0020)
BUTTON1Rhin& =@CREATE("BUTTON",Picstatic1&,"Hinzufügen",0037,0250,0090,0030)
BUTTON2Rhin& =@CREATE("BUTTON",Picstatic1&,"Liste",0147,0250,0090,0030)
BUTTON3Rhin& =@CREATE("BUTTON",Picstatic1&,"OK",0257,0250,0090,0030)
SETFOCUS(Picstatic1&)
LET DIALOGENDERhin%=0
WHILENOT DIALOGENDERhin%
waitinput
If @EQU(%KEY,2)
LET DIALOGENDERhin%= 1
ELSEIF %wmPaint=1
ELSEIF GETFOCUS(EDIT1&) EDIT
ELSEIF GETFOCUS(EDIT2&) EDIT
ELSEIF GETFOCUS(EDIT3&) EDIT
ELSEIF GETFOCUS(BUTTON1Rhin&) BUTTON Hinzufügen
LET DIALOGENDERhin%= 1
..........
ELSEIF GETFOCUS(BUTTON2Rhin&) BUTTON Liste
LET DIALOGENDERhin%= 1
......
ELSEIF GETFOCUS(BUTTON3Rhin&) BUTTON OK
LET DIALOGENDERhin%= 1
ENDIF
Endwhile
...........
ausser dem %wmpaint wird das waitinput nicht durchbrochen. das Waitinput reagiert nicht auf die Buttons, nur wenn ich auf Buttons im übergeordneten Hauptfenster klicke. und bei dem Fenster habe ich den Hintergrund per Loadbmp geladen, da Xprofan und Windows das Neuzeichnen on the fly erledigen.
Im Unterfenster habe ich diesen Weg gewählt, da das Control auch hier das Neuzeichnen on the fly erledigt. Schmeisse ich das Control raus reagiert auch der Waitinput wieder.
Ich kann also weder auf das Control noch auf das Waitinput verzichten. Hat einer ne Idee wie ich die beiden dazu bringe sich zu vertragen?
Vielen Dank im voraus.
Hubert |
|
|
| WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 03.08.2006 ▲ |
|
|
|
|
| Welche XProfanversion genau?
Der Code ist leider nicht lauffähig - sowas ist gemein. |
|
|
| |
|
|
|
RGH | Hallo, gebe bei den Dialogelementen den Dialog als Elternfenster an und nicht das Static. Das Elternfenster gibt an, an welches Fenster Nachrichten über das Betätigemn der Dialogelemnte geschickt werden. Ein Static kann damit nichts anfangen.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 03.08.2006 ▲ |
|
|
|
|
Hubert Binnewies | [quote:63b31b4736=iF]Welche XProfanversion genau?
Der Code ist leider nicht lauffähig - sowas ist gemein. [/quote:63b31b4736] tztz.....Also...irgendwo im Forum (sorry ich weiss nicht mehr wo) hattest du darum gebeten die verwendete XProfan Version an eine bestimmte Stelle zu schreiben... Hab ich gemacht, aber wenn das zu klein ist musst Du schon deine Webseite umschreiben
[quote:63b31b4736=RGH]Hallo, gebe bei den Dialogelementen den Dialog als Elternfenster an und nicht das Static. Das Elternfenster gibt an, an welches Fenster Nachrichten über das Betätigemn der Dialogelemnte geschickt werden. Ein Static kann damit nichts anfangen.
Gruß Roland[/quote:63b31b4736] Hab ich versucht, dabei entsteht aber ein anderes Problem. Da ich das Static zuerst zeichne liegen die Buttons und Edits optisch vor dem Static. Aber da der Parent der Dialog ist liegen Sie Programmtechnisch dahinter und können Somit mit der Maus nicht erreicht werden. Ergo: funktioniert nicht.
Aber ich habe schonmal ein Ähnliches Prob gehabt, vielleicht erinnerst Du Dich daran IF. Schau mal hier : [...] Da hattest nämlich genau DU mir den Tip mit dem Static gegeben.
Ich hab mir aber den Beitrag aber auch nochmal genau durchgelesen, und da noch ein Tip von Dir entdeckt, den Getmessage. Daraus habe ich eine Lösung gebastelt (ich hoffe die läuft auch noch im Compilat) KompilierenMarkierenSeparierenDLGRhin&=CREATE("DIALOG",%HWND,"Rechner hinzufügen",250,120,400,330)
USEFONT "MS Sans Serif",13,0,0,0,0
SETDIALOGFONT 1
Def Cps(6) Control("STATIC",@$(2),$5400010E,@%(3),@%(4),@%(5),@%(6),@%(1),2000, %Hinstance)
Picstatic&=Cps(DlgRhin&,"",0,0,Width(Dlg&),Height(Dlg&))
Pich&=Create("hpic",-1,"IMGRHhintergrund.bmp")
Sendmessage(Picstatic&,$172,0,Pich&)
EDIT1& =@CREATE("EDIT",Picstatic&,"",0050,0080,0285,0020)
EDIT2& =@CREATE("EDIT",Picstatic&,"",0050,0140,0285,0020)
EDIT3& =@CREATE("EDIT",Picstatic&,"",0050,0202,0285,0020)
BUTTON1Rhin& =@CREATE("BUTTON",Picstatic&,"Hinzufügen",0037,0250,0090,0030)
BUTTON2Rhin& =@CREATE("BUTTON",Picstatic&,"Liste",0147,0250,0090,0030)
BUTTON3Rhin& =@CREATE("BUTTON",Picstatic&,"OK",0257,0250,0090,0030)
SETFOCUS(Picstatic&)
LET DIALOGENDERhin%=0
WHILENOT DIALOGENDERhin%
GetMessage
If &wParam=1
Continue
Endif
If @EQU(%KEY,2)
LET DIALOGENDERhin%= 1
ELSEIF GETFOCUS(EDIT1&) EDIT
ELSEIF GETFOCUS(EDIT2&) EDIT
ELSEIF GETFOCUS( BUTTON1Rhin&) BUTTON Hinzufügen
LET DIALOGENDERhin%= 1
ELSEIF GETFOCUS(BUTTON2Rhin&) BUTTON Liste
LET DIALOGENDERhin%= 1
ELSEIF %Getfocus=BUTTON3Rhin& BUTTON OK
LET DIALOGENDERhin%= 1
ENDIF
Endwhile
Funktioniert soweit einwandfrei, ich habe nur im weiteren Verlauf ein anderes Prob: Wie kann ich die Systemvariable %Key löschen? Mit einfachem Auslesen wird die nicht zurück gesetzt...
Hubert |
|
|
| WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 04.08.2006 ▲ |
|
|
|
|
| |
|
| |
|
|
|
Jörg Sellmeyer | |
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 04.08.2006 ▲ |
|
|
|
|
Hubert Binnewies | Danke euch beiden....hat wunderbar funktioniert..
Jetzt weiss ich auch das der GetMessage den %Key nicht löscht. |
|
|
| WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 04.08.2006 ▲ |
|
|
|
|
Hubert Binnewies | Ein Prob habe ich noch mit meiner neuen Konstruktion....
Ich weiss jetzt zwar wie %Key gelöscht wird, aber in der Konstruktion wird er nicht mehr gesetzt (weiss der geier warum).. Jetzt bin ich nicht in der Lage das Kreuzchen zum Schliessen abzufragen. Auch %Message , &wParam , &lParam geben keine eindeutige Werte, nur bei einem Doppelklick auf Schliessen, und das ist nicht Sinn der Sache.
Hat da eine ne Idee??
Danke schonmal im voraus.
Hubert. |
|
|
| WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 05.08.2006 ▲ |
|
|
|
|
Hubert Binnewies | Keiner eine Idee???
Seltsam... |
|
|
| WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 08.08.2006 ▲ |
|
|
|
| |
|
- Seite 2 - |
|
|
| Immer einen lauffähigen Code bitte welcher das Problem aufzeigt - dann kann auch geholfen werden. |
|
|
| |
|
|
|
Hubert Binnewies | Der zweite Code ist gemeint..... Um ihn lauffähig zu machen, muss noch ein Hauptfenster erzeugt werden, die Variablen declariert werden und ne Bitmap dazu gesetzt werden.... Die ersten 2 Dinge könnte ich ja noch machen... Aber die Bitmap.....
Das da oben ist doch bis auf: KompilierenMarkierenSeparierenDef Cps(6) Control("STATIC",@$(2),$5400010E,@%(3),@%(4),@%(5),@%(6),@%(1),2000, %Hinstance)
Picstatic&=Cps(DlgRhin&,"",0,0,Width(Dlg&),Height(Dlg&))
Pich&=Create("hpic",-1,"IMGRHhintergrund.bmp")
Sendmessage(Picstatic&,$172,0,Pich&)
und KompilierenMarkierenSeparieren Der Standart code wie er vom Roc erzeugt wird. Das obere ist nur eingesetzt und die Create´s danach angepasst Das GetMessage ersetzt das Waitinput und die If abfrage sorgt dafür dass das Fenster erst reagiert wenn man auf nen Butten die maustaste loslässt.
das blöde ist dass das obere Konstrukt nicht den %Key setzt womit KompilierenMarkierenSeparieren niemals zutrifft.
wie kann ich jetzt dennoch das klicken auf das Schliessfeld abfragen? oder wie bekomme ich das Schliessfeld ganz weg?
Danke schonmal im voraus...
Hubert |
|
|
| WinXP Prof, XProfan 9.1 Newbie
Ein kluger Kopf sagte mal: "Nach dem derzeitigen Stand der Technik ist es unmöglich Programme zu schreiben, die fehlerfrei laufen!" | 08.08.2006 ▲ |
|
|
|
|
| Das Schliessfeld (systemmenü) kannst Du über den Windowstyle abschaffen. (-8) |
|
|
| |
|
|