| |
|
|
- Seite 1 - |
|
GDL | Hallo,
versuche gerade mit einem farbigen Dialogfenster zu hantieren.Wenn ich autopaint benutze, muss ich immer das ganze Fenster zerstören , da bei CLS immer einige Controls verdeckt werden.
Nebenbei gibts noch Probleme, wenn das Dialogfenster noch ne Toolbar hat. KompilierenMarkierenSeparierendeclare dlg&,toolbar&,button&
@Set(AutoPaint,1)
usermessages 16
window 0,0 - %maxx,%maxy
dlg&=create(window,%hwnd,,0,0,%maxx,%maxy)
farbe
sleep 1000
toolbar&=@Create(Toolbar,dlg&,0,0,1,0,0)
@Toolbar(AddTextButton,toolbar&,8,100,Sichern,Datei speichern)
@Toolbar(AddTextButton,toolbar&,7,200,hihi,Datei speichern)
button&=create(button,dlg&,bbb,100,400,100,30)
proc farbe
startpaint dlg&
cls RGB(144,80,0)
endpaint
endproc
whilenot 0
waitinput
if %umessage = 16
destroywindow(dlg&)
end
ELSEIF %wmPaint
farbe
endif
wend
Servus Georg |
|
|
| |
|
|
|
| |
|
- Seite 1 - |
|
GDL | Jo, habe ich gerade gemerkt und wenn ich die Procedure 3mal durchlaufen lasse gehts auch immer einwandfrei.Wennas auch ne Sauerei iss, hilfts mir nichts, ich bekomme es anders nicht hin. Und nachdem auch die prfellow Toolbar in meinem eigentlichen Programm funzt bin ich wieder ganz happy. Danke nochmals allen.
Servus Georg |
|
|
| |
|
|
|
| Du bekommst es nicht anders hin?
Was ist daran nicht-hinbekommbar erst ein Farbstatic zu erzeugen, und dann die Buttons? |
|
|
| |
|
|
|
GDL | @iF, das mit dem Static habe ich jetzt auch begriffen. Nur soetwas steht nicht in der Hilfe oder bei der SKControl Hilfe. Dies ist auch der Grund warum immer wieder nach einem XProfan Buch nachgefragt wird.
Ich habe mir damals ein GW-Basic Buch (721 Seiten für 68DM) gekauft. Allein die für mich wichtige Schnittstellenprogrammierung umfasst dort 23 Seiten.
Ich weiss auch das der Kosten/Nutzen Faktor bei XProfan nicht gerade super ist.Ich sage auch ehrlich, dass ich mir zurzeit keines kaufen könnte. Ich wollte halt nur einen Grund dafür nennen, warum immer nach einem Buch gefragt wird.
Aber ich hoffe, dass ein GDL Querdenker euch nicht zu stark auf Trapp hält.
Servus Georg |
|
|
| |
|
|
|
GDL | Schade ich kann nicht so schnell Tippen.Meine Antwort gehört vor deine. |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
Andreas Miethe
| iF
Da ist nicht eigenartig - das Verhalten ist absolut korrekt und zeigt dass das Prinzip des Herummalens auf dem Parent von Controls natürlich zu Anzeigefehlern führt wenn man auch Bereiche übermalt welche von Windows selbst in verschiedenen Fällen neugezeichnet werden.
Hallo IF,
selbst wenn nicht auf den Controls rumgemalt wird bleibt das seltsame Verhalten der Toolbar-Buttons ( w.o. beschrieben ) bestehen. Man kann das verhindern indem man der Toolbar eine Message sendet und zwar TB_SETPARENT. Wenn Parent %hwnd ist, ist das Verhalten wieder normal.
Ein Weg für XProfan die Hintergrundfarbe für Dialoge zu bestimmen ist für mich folgender, da wird auch nicht auf den Controls rumgemalt, ein Colored-Static ist auch nicht nötig. KompilierenMarkierenSeparieren $H messages.ph
$H windows.ph
Set(FastMode,1)
declare dlg&,toolbar&,button&
declare oldproc&,brush&,ende&
Brush& = ~CreateSolidBrush(RGB(144,80,0))
Proc DialogProc
Parameters Uwnd&,Umsg&,wParam&,lParam&
if Umsg& = ~WM_CTLCOLORDLG
RETURN Brush&
endif
if Umsg& = ~WM_SIZE
setwindowpos toolbar& = 0,0-0,0
Endif
if Umsg& = ~WM_Close
~deleteObject(brush&)
ende& = 1
endif
Return 0
endproc
window 0,0 - %maxx,%maxy
dlg&=create(window,%hwnd,,0,0,0,0)
button&=create(button,dlg&,bbb,40,80,100,30)
toolbar&=@Create(Toolbar,dlg&,0,0,0,0,0)
nächste zeile remmen um Effekt zu sehen
sendmessage(toolbar&,1061,%hwnd,0)TB_SETPARENT
@Toolbar(AddTextButton,toolbar&,8,100,Sichern,Datei speichern)
@Toolbar(AddTextButton,toolbar&,7,200,hihi,Datei speichern)
oldproc& = ~SetWindowLong(dlg&,~DWL_DLGPROC,Procaddr(DialogProc,4))
setwindowpos dlg& = 0,0-400,400
whilenot ende&
waitinput
wend
|
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 28.07.2007 ▲ |
|
|
|
|
| Womit wir aber a) beim FastMode, und b) beim ProcAddr-Problem wären...
...was wiederum bedeutet das diese Lösung wegen b) leider keinesfalls empfehlenswert ist da Abstürze, Programmfehler und Schlimmeres Vorprogrammiert ist. ... was wiederum das ColoredStatic empfehlen würde bis Roland das ProcAddr stackt. |
|
|
| |
|
|
|
Andreas Miethe
| iF
Womit wir aber a) beim FastMode, und b) beim ProcAddr-Problem wären... ...was wiederum bedeutet das diese Lösung wegen b) leider keinesfalls empfehlenswert ist da Abstürze, Programmfehler und Schlimmeres Vorprogrammiert ist. ... was wiederum das ColoredStatic empfehlen würde bis Roland das ProcAddr stackt.
Kannst Du das Problem mal etwas genauer beschreiben, ich hatte damit bisher noch nie ein Problem, und auch keinen Absturz. War mir bisher auch nicht bekannt, so ein Problem, wahrscheinlich habe ich das was verpasst ? |
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 28.07.2007 ▲ |
|
|
|
|
| Klar - gab ne menge Diskussionsstoff hier in der Community zu diesem Thema.
Mir war aufgefallen das etwas bei der Abarbeitung nicht stimmt wenn eine per procaddr bezogene FnAdresse angeCallt wird. Nach längerem Bohren hatte sich meine Vermutung bestätigt das XProfan (in bisherigen Versionen) bei Calls auf ProcAddr-Fns keinesfalls abprüft ob es sich nicht vlt. noch mitten in einer andern Abarbeitung (z.B. in einer anderen Proc) befindet. Es würfelt demnach Variableninhalte und Namen im schlimmsten Fall einfach durcheinander wenn z.B. von einer Api solch eine FnCall an XProfan abgesandt wird. Da sich das XProfan nunmal so verhält, hatte ich Roland den Vorschlag gemacht zu bedenken ob es nicht besser wäre die angecallten Fns nicht sofort auszuführen, sondern die Anfragen auf eine Art internen Stack zu packen welcher erst dann nach und nach abgearbeitet wird wenn XProfan z.B. onIdle ist - also z.B. im WaitInput. Roland wird der Sache IMHO nachgehen.
Solange das aber nicht der Fall ist kann man nur abraten, an z.B. Apis eine mit ProcAddr-bezogenen FnAdresse abzugeben für die Nutzung von z.B. nicht-enumeriernden Apis.
Auf Deutsch ist ProcAddr nur dann sicher benutzbar wenn man die Adresse an eine Api abgibt welche die Adresse nur ancallt solange die Api selbst arbeitet, also das XProfanprogramm solange anhält. Hierzu zählen z.B. in der Hilfe erwähnte Apis welche etwas enumierieren - z.B. Fonts etc.
Für WndProc-Zeugs jedoch ist das ganze sehr, sehr gefährlich. Da bleiben also demnach die Usermessages - welche leider - wenn Roland meiner anderen Bitte im Bezug auf UMs nicht folgt - auch nicht wirklich 100% zuverlässig sind.
Für mich hat Roland also für XPRofan11 zwei essentielle Aufgaben - UserMessages auf einen int.Stack packen, ProcAddrCalls auf einen int.Stack packen. Solange das nicht 100% funktioniert bleibt XProfan in einer Messages basierten Umgebung (Windows) mit eingeschränktem Gebrauchswert. |
|
|
| |
|
|
|
Andreas Miethe
| Danke für die Aufklärung.
Das Thema ist tatsächlich an mir vorrübergegangen !! Also ist Vorsicht geboten, werde ich mir merken. |
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 28.07.2007 ▲ |
|
|
|
|
| Das ist u.A. der Grund weshalb ich des Öfteren zu Problemen Lösungsvorschläge poste wo so mancher denkt:
|
|
|
| |
|
|
|
GDL | Warum finde ich immer solche Probleme, die dann so einen Rattenschwanz verursachen.
Servus Georg |
|
|
| |
|
|
|
| Das ist Rolands Schuld. |
|
|
| |
|
|