Window-Refresh bzw. fehlender Fensteraufbau
Window-Refresh bzw. fehlender Fensteraufbau
Hallöchen.
Ich habe mein Problem bereits im "ehemaligen" Forum mal angesprochen und div. Antworten erhalten, die mein Problem leider nicht lösten.
Mich wundert nur, das nur ich das Problem habe....*kopf-schüttel*
Folgendes:
Ich habe ein Fenster mit diversen Gadgets. Ich öffne ein weiteres Fenster, was mein Hauptfenster überlappt bzw. mittig drüber liegt - dies könnte auch ein openfilereq sein.Alles ohne Threats, macht das Hauptprogramm. Sobald ich das obere (als 2.geöffnete) Fenster schliesse, wird das untere (Hauptfenster) nicht neu aufgebaut, d.h. es fehlen einige Gadgets oder der "überlapp-Bereich" bleibt grau.
Ich würde gerne den Code einfügen, aber der ist 30,1kb groß (wird nen Email Programm), aber ich denke, jeder weiß was gemeint ist.
Thx schomma im voraus.
Ich habe mein Problem bereits im "ehemaligen" Forum mal angesprochen und div. Antworten erhalten, die mein Problem leider nicht lösten.
Mich wundert nur, das nur ich das Problem habe....*kopf-schüttel*
Folgendes:
Ich habe ein Fenster mit diversen Gadgets. Ich öffne ein weiteres Fenster, was mein Hauptfenster überlappt bzw. mittig drüber liegt - dies könnte auch ein openfilereq sein.Alles ohne Threats, macht das Hauptprogramm. Sobald ich das obere (als 2.geöffnete) Fenster schliesse, wird das untere (Hauptfenster) nicht neu aufgebaut, d.h. es fehlen einige Gadgets oder der "überlapp-Bereich" bleibt grau.
Ich würde gerne den Code einfügen, aber der ist 30,1kb groß (wird nen Email Programm), aber ich denke, jeder weiß was gemeint ist.
Thx schomma im voraus.
Zuletzt geändert von Agent am 13.09.2004 16:30, insgesamt 1-mal geändert.
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
So. Hab mich entschlossen doch mal nen Auszug aus dem Progy zu posten. Hier die Proc die vom Hauptfenster aus per Menü aufgerufen wird....
Ich hoffe mir kann mit diesem grundsätzlichen Problem geholfen werden, da ich das gleiche Prob auch in anderen Proggys hab.
Code: Alles auswählen
Procedure createnewmail(accountnr)
OpenWindow(#createmailwin, 0, 0, 560, 500,#PB_Window_ScreenCentered, "Neue Email")
If CreateGadgetList(WindowID())
TextGadget(#send_text_1, 10, 40, 90, 20, "Empfänger")
TextGadget(#send_text_2, 10, 70, 90, 20, "Kopie")
TextGadget(#send_text_3, 10, 100, 90, 20, "Betreff")
StringGadget(#send_receiver, 100, 40, 320, 20, "", #PB_String_BorderLess)
StringGadget(#send_copy, 100, 70, 320, 20, "", #PB_String_BorderLess)
StringGadget(#send_subject, 100, 100, 320, 20, "", #PB_String_BorderLess)
ComboBoxGadget(#priority, 490, 40, 60, 100)
AddGadgetItem(#priority,-1,"-1")
AddGadgetItem(#priority,-1,"0")
AddGadgetItem(#priority,-1,"1")
TextGadget(#send_text_5, 440, 40, 50, 20, "Priorität")
TextGadget(#send_text_0, 10, 10, 80, 20, "Absender")
EditorGadget(#mailtext, 10, 160, 540, 300)
ButtonGadget(#send_send, 10, 470, 150, 20, "Senden", #PB_Button_Default)
ButtonGadget(#send_abort, 440, 470, 110, 20, "Abbrechen")
ComboBoxGadget(#send_sender,100, 10, 160, 100)
;StringGadget(#send_sender, 100, 10, 160, 20, "", #PB_String_ReadOnly | #PB_String_BorderLess)
For i=1 To anz_account
AddGadgetItem(#send_sender,-1,account(i)\accountname$)
Next i
TextGadget(#send_text_4, 10, 130, 90, 20, "Anhang")
StringGadget(#send_attachment, 100, 130, 320, 20, "", #PB_String_BorderLess)
ButtonGadget(#send_choose_attachment, 430, 130, 120, 20, "Datei anhängen")
;SetGadgetText(#send_sender,account(accountnr)\username$)
EndIf
exit=#False
Repeat
WinEvent=WindowEvent()
If WinEvent=#PB_Event_Gadget
Select EventGadgetID()
Case #priority
;
Case #send_send
edit(MailText$)
sendmail=sendmail(GetGadgetItemState(#send_sender,0),GetGadgetText(#send_sender),GetGadgetText(#send_receiver),GetGadgetText(#send_copy),GetGadgetText(#send_subject),Val(GetGadgetText(#priority)),GetGadgetText(#mailtext))
exit=#True
Case #send_choose_attachment
;
Case #send_abort
exit=#True
Default
;
EndSelect
EndIf
Delay(10)
Until exit=#True
CloseWindow(#createmailwin)
UseWindow(#mainwin)
ActivateWindow()
ProcedureReturn sendmail
EndProcedure
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Hi RolandIV.
Hast du denn das Problem mal nachvollzogen?
Die Konstante mit dem Repaint kenn ich gar nicht *grübel*
SetWindowCallback...ich weiß. Aber davon ist mir abgeraten worden. Zudem löst dies nicht das "refresh" problem.
Ich glaube, dass passiert auch erst bei etwas komplexeren Gadgets, von der Menge her. Wenn nur 2-3 Gadgets da sind ist mir das auch noch nicht aufgefallen.
Naja, vielleicht hat ja jemand noch ne Idee oder nen Code-Schnipsel.
Hast du denn das Problem mal nachvollzogen?
Die Konstante mit dem Repaint kenn ich gar nicht *grübel*
SetWindowCallback...ich weiß. Aber davon ist mir abgeraten worden. Zudem löst dies nicht das "refresh" problem.
Ich glaube, dass passiert auch erst bei etwas komplexeren Gadgets, von der Menge her. Wenn nur 2-3 Gadgets da sind ist mir das auch noch nicht aufgefallen.
Naja, vielleicht hat ja jemand noch ne Idee oder nen Code-Schnipsel.
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Sorry, dein Code ist so nicht ausführbar, es fehlen sämtliche
Konstantendeklarationen etc.
Vielleicht fügst du die noch schnell hinzu, ich vermute aber jetzt schon,
dass dein Problem ist, dass du WindowEvent() nicht mehr aufrufst.
Konstantendeklarationen etc.
Vielleicht fügst du die noch schnell hinzu, ich vermute aber jetzt schon,
dass dein Problem ist, dass du WindowEvent() nicht mehr aufrufst.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
also wenn du ein requester öffnest, und ihn wieder sclhießt, ist da ein grauer kasten im fenster drin oder wie??
Also ichhatte das Problem noch nie!
Vielleicht hilft dir das:[/code]
Also ichhatte das Problem noch nie!
Vielleicht hilft dir das:
Code: Alles auswählen
hWNd=OpenWindow(0,0,0,200,150,#PB_WINDOW_SYSTEMMENU|#PB_WINDOW_SCREENCENTERED,"Test")
CreateGadgetList(WindowID())
ButtonGadget(0,20,20,100,20,"OpenRequester")
ButtonGadget(1,20,50,100,20,"Child-Window")
ButtonGadget(2,20,90,100,20,"Ende")
Repeat
Select WaitWindowEvent()
Case #PB_EVENT_CLOSEWINDOW
If EventWindowID()=0 : End : EndIf
If EventWindowID()=1 : CloseWindow(1) : EndIf
Case #PB_EVENT_GADGET
Select EventGadgetID()
Case 0
OpenFileRequester("","","",0)
Case 1
OpenWindow(1,0,0,100,100,#PB_WINDOW_SYSTEMMENU|#PB_WINDOW_WINDOWCENTERED,"Child",hWnd)
Case 2
End
EndSelect
EndSelect
ForEver
Ok. Ich seh schon, wir kommen so nicht weiter.
Hier also ein Auzug, den ich fürs Board mod. habe. Aber der Fehler tritt hier definitiv auf! Stört euch jetzt aber nicht so am coding, ist ne test-geschichte...
thx, hier der code:
Hier also ein Auzug, den ich fürs Board mod. habe. Aber der Fehler tritt hier definitiv auf! Stört euch jetzt aber nicht so am coding, ist ne test-geschichte...
thx, hier der code:
Code: Alles auswählen
#mainwin=0
#fehler="FEHLER"
#createmailwin=1
Enumeration ; hauptfenster
#Frame3D_0
#Frame3D_1
#Text_0
#Text_1
#ProgressBar_0
#prozent
#Tree_0
#ListIcon_0
#Panel_0
#Editor_0
#Editor_1
#Editor_2
#Web_0
#ToolBar_0
#ToolBar_New
#ToolBar_Open
#ToolBar_Save
#ToolBar_Print
#ToolBar_Find
#ToolBar_Properties
#ToolBar_Help
#ListIcon_1
#Menu_0
EndEnumeration
Enumeration ; neue email fenster
#send_text_1
#send_text_2
#send_text_3
#send_receiver
#send_copy
#send_subject
#priority
#send_text_5
#send_text_0
#mailtext
#send_send
#send_abort
#send_sender
#send_text_4
#send_attachment
#send_choose_attachment
EndEnumeration
Procedure MainWindow()
If OpenWindow(#mainwin, 0, 0, 800, 620, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered , "windowtest")
If CreateGadgetList(WindowID())
Frame3DGadget(#Frame3D_0, 10, 40, 200, 350, "Account(s)")
Frame3DGadget(#Frame3D_1, 10, 400, 200, 170, "Attachment(s)")
TextGadget(#Text_0, 10, 580, 420, 20, "", #PB_Text_Border)
ProgressBarGadget(#ProgressBar_0, 440, 580, 180, 20, 0, 100,#PB_ProgressBar_Smooth)
TextGadget(#prozent,640,585,40,20,"")
TextGadget(#Text_1, 685, 580, 105, 20, "Der Author", #PB_Text_Border)
TreeGadget(#Tree_0, 20, 60, 180, 320)
ListIconGadget(#ListIcon_0, 20, 420, 180, 140, "Dateiname", 125)
AddGadgetColumn(#ListIcon_0, 2, "kb", 50)
ListIconGadget(#ListIcon_1, 220, 50, 570, 190, "!", 15, #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
AddGadgetColumn(#ListIcon_1, 2, "Absender", 140)
AddGadgetColumn(#ListIcon_1, 3, "Betreff", 220)
AddGadgetColumn(#ListIcon_1, 4, "Datum", 140)
AddGadgetColumn(#ListIcon_1, 5, "Größe", 50)
PanelGadget(#Panel_0, 220, 250, 570, 320)
AddGadgetItem(#Panel_0, -1, "Email-Text")
EditorGadget(#Editor_0, 8, 8, 550, 280)
AddGadgetItem(#Panel_0, -1, "HTML")
WebGadget(#Web_0, 8, 8, 550, 280, "about:blank")
AddGadgetItem(#Panel_0, -1, "Header")
EditorGadget(#Editor_1, 8, 8, 550, 280)
AddGadgetItem(#Panel_0, -1, "RAW")
EditorGadget(#Editor_2, 8, 8, 550, 280)
CreateMenu(#Menu_0,WindowID())
MenuTitle("Aktion")
MenuItem(1,"Neue Email")
MenuItem(2,"Emails downloaden")
MenuTitle("Einstellungen")
MenuItem(10,"Accounts")
MenuTitle("About")
MenuItem(99,"Pure-Board-Test")
CloseGadgetList()
ProcedureReturn -1
EndIf
EndIf
ProcedureReturn 0
EndProcedure
Procedure createnewmail(accountnr)
OpenWindow(#createmailwin, 0, 0, 560, 500,#PB_Window_ScreenCentered, "Neue Email")
If CreateGadgetList(WindowID())
TextGadget(#send_text_1, 10, 40, 90, 20, "Empfänger")
TextGadget(#send_text_2, 10, 70, 90, 20, "Kopie")
TextGadget(#send_text_3, 10, 100, 90, 20, "Betreff")
StringGadget(#send_receiver, 100, 40, 320, 20, "", #PB_String_BorderLess)
StringGadget(#send_copy, 100, 70, 320, 20, "", #PB_String_BorderLess)
StringGadget(#send_subject, 100, 100, 320, 20, "", #PB_String_BorderLess)
ComboBoxGadget(#priority, 490, 40, 60, 100)
AddGadgetItem(#priority,-1,"-1")
AddGadgetItem(#priority,-1,"0")
AddGadgetItem(#priority,-1,"1")
TextGadget(#send_text_5, 440, 40, 50, 20, "Priorität")
TextGadget(#send_text_0, 10, 10, 80, 20, "Absender")
EditorGadget(#mailtext, 10, 160, 540, 300)
ButtonGadget(#send_send, 10, 470, 150, 20, "Senden", #PB_Button_Default)
ButtonGadget(#send_abort, 440, 470, 110, 20, "Abbrechen")
ComboBoxGadget(#send_sender,100, 10, 160, 100)
;StringGadget(#send_sender, 100, 10, 160, 20, "", #PB_String_ReadOnly | #PB_String_BorderLess)
For i=1 To anz_account
AddGadgetItem(#send_sender,-1,"Pure-Board-Test")
Next i
TextGadget(#send_text_4, 10, 130, 90, 20, "Anhang")
StringGadget(#send_attachment, 100, 130, 320, 20, "", #PB_String_BorderLess)
ButtonGadget(#send_choose_attachment, 430, 130, 120, 20, "Datei anhängen")
;SetGadgetText(#send_sender,account(accountnr)\username$)
EndIf
exit=#False
Repeat
winevent=WindowEvent()
If winevent=#PB_Event_Gadget
Select EventGadgetID()
Case #priority
;
Case #send_send
;edit(MailText$)
;sendmail=sendmail(GetGadgetItemState(#send_sender,0),GetGadgetText(#send_sender),GetGadgetText(#send_receiver),GetGadgetText(#send_copy),GetGadgetText(#send_subject),Val(GetGadgetText(#priority)),GetGadgetText(#mailtext))
exit=#True
Case #send_choose_attachment
;
Case #send_abort
exit=#True
Default
;
EndSelect
EndIf
Delay(10)
Until exit=#True
CloseWindow(#createmailwin)
UseWindow(#mainwin)
ActivateWindow()
ProcedureReturn sendmail
EndProcedure
MainWindow()
Repeat
winevent=WindowEvent()
If winevent=#PB_Event_Menu
Select EventMenuID() ; MENÜ abfragen
Case 1 ; Neue Email
;HideWindow(#mainwin,1)
If createnewmail(1)
MessageRequester("Email wurde versendet","",0)
Else
MessageRequester(#fehler,"Email konnte nicht versendet werden",#MB_ICONERROR)
EndIf
;HideWindow(#mainwin,0)
Case 2 ; Emails downloaden
For i=1 To anz_account
;receivemail(i)
Next i
Case 99
;about()
Default
;infowin(Str(EventMenuID())+" wurde gewählt",1)
EndSelect
EndIf
If winevent=#PB_Event_Gadget
Select EventGadgetID()
Case #ListIcon_1
If EventType() = #PB_EventType_LeftDoubleClick
eintragnr=GetGadgetState(#ListIcon_1)+1
;MailText$=loadmail(eintragnr)
;SetGadgetText(#Editor_1,loadmailheader(eintragnr))
;SetGadgetText(#Editor_0,convertmailtext(loadmailtext(eintragnr)))
;SetGadgetText(#Editor_2,MailText$)
;MessageRequester("",getcurrentdir(),0)
;If Len(getmailhtmltext(MailText$))>0
; tempfile.s=getcurrentdir()+#maildir+Str(Date())+".html"
; OpenFile(12,tempfile)
; WriteStringN(convertmailtext(getmailhtmltext(MailText$)))
; CloseFile(12)
; Delay(250)
; SetGadgetText(#Web_0,tempfile)
;Else
; SetGadgetText(#Web_0,getcurrentdir()+#maildir+"_nohtml.htm")
;EndIf
EndIf
Case #Tree_0
If EventType() = #PB_EventType_LeftClick
accountnr=GetGadgetState(#Tree_0)
If accountnr>=0
accountnr+1
accountnr=Round(accountnr/5,1)
;listnewmails(accountnr)
EndIf
EndIf
;
EndSelect
EndIf
Until winevent=#PB_Event_CloseWindow
CloseWindow(#mainwin)
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Ohne jetzt ins Detail zu gehen; nimm als ersten Schritt das komplette Eventhandling aus der Prozedur createnewmail heraus, sondern benütze das Handling in der Hauptschleife. Dann sollte es funktionieren - und evt. noch bestehende Fehler leichter behebbar.Agent hat geschrieben:Ok. Ich seh schon, wir kommen so nicht weiter.
Hier also ein Auzug, den ich fürs Board mod. habe. Aber der Fehler tritt hier definitiv auf! Stört euch jetzt aber nicht so am coding, ist ne test-geschichte...
Dann schau Dir die Konstanten an; die überschneiden sich für die beiden Fenster. Mit nur einer Enumeration Anweisung für beide Fenster / alle Gadgets funktioniert es.
AMD XP 2400+ · 1 GB RAM · Radeon 9800 Pro · Win XP SP1 · IE 6.0
hm...
Stimmt. Der visual-editor ist zwar brauchbar aber nicht das Ultimative. Jetzt wo du es sagst mit den Konstanten - da könnt was dran sein.
Du meinst, ich soll das winevent() nicht separat in der Proc abhandeln? Das "neue email" Fenster ist aber doch nur kurzzeitig auf, wenn es beendet wird, hat das doch nix mehr mit dem Hauptprogramm zu tun. Dann würde die Abfrage immer noch "überlaufen" werden...
Macht doch eigentlich kein Sinn, oder?
Stimmt. Der visual-editor ist zwar brauchbar aber nicht das Ultimative. Jetzt wo du es sagst mit den Konstanten - da könnt was dran sein.
Du meinst, ich soll das winevent() nicht separat in der Proc abhandeln? Das "neue email" Fenster ist aber doch nur kurzzeitig auf, wenn es beendet wird, hat das doch nix mehr mit dem Hauptprogramm zu tun. Dann würde die Abfrage immer noch "überlaufen" werden...
Macht doch eigentlich kein Sinn, oder?
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Jup, an dem mit den Konstanten ist tatsächlich was dran.Agent hat geschrieben:hm...
Stimmt. Der visual-editor ist zwar brauchbar aber nicht das Ultimative. Jetzt wo du es sagst mit den Konstanten - da könnt was dran sein.
Du meinst, ich soll das winevent() nicht separat in der Proc abhandeln? Das "neue email" Fenster ist aber doch nur kurzzeitig auf, wenn es beendet wird, hat das doch nix mehr mit dem Hauptprogramm zu tun. Dann würde die Abfrage immer noch "überlaufen" werden...
Macht doch eigentlich kein Sinn, oder?
Nagel mich jetzt nicht auf irgendwelche unerwünschten Seiteneffekte fest, wenn Du seperates Event-Handling betreibst. Auf alle Fälle ist der Overheadaber definitiv geringer wenn Du nur eine Hauptschleife fährst und als Erstes schaust, welches Fenster betroffen ist (EventWindowID) und erst dann auf Gadget-Event-Ebene gehst.
AMD XP 2400+ · 1 GB RAM · Radeon 9800 Pro · Win XP SP1 · IE 6.0