Seite 2 von 2
Verfasst: 06.11.2007 16:36
von Fluid Byte
Hmm, es gibt vielleicht noch ne Möglichkeit.
Moment mal...
Verfasst: 06.11.2007 16:52
von edel
Du kannst den Style immer noch per VirtualProtect im Speicher aendern
und dann das Gadget erstellen, oder du nimmst so Sachen wie
CreateGadget mit dem Editortyp, funktioniert dann genauso.
Beispiel :
Code: Alles auswählen
Procedure EditGadget(i,x,y,cx,cy,flags)
Protected oldExitProtect
Protected *flags.long
CompilerIf #PB_Compiler_Unicode
!mov eax,_PB_EditorGadget2_UNICODE@24
CompilerElse
!mov eax,_PB_EditorGadget2@24
CompilerEndIf
!add eax,24
!mov [p.p_flags],eax
VirtualProtect_(*flags,4,#PAGE_READWRITE,@oldExitProtect)
*flags\l = #WS_CHILD | #WS_VISIBLE
VirtualProtect_(*flags,4,oldExitProtect,@oldExitProtect)
ProcedureReturn EditorGadget(i,x,y,cx,cy,flags)
EndProcedure
Macro EditorGadget(i,x,y,cx,cy,flags=0)
EditGadget(i,x,y,cx,cy,flags)
EndMacro
If OpenWindow(0,0,0,500,50,"Windows-Vorlage",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
EditorGadget(1,10,10,480,23)
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Verfasst: 06.11.2007 19:01
von CNESM
VirtualProtect ?!?!?!
Noch nie von gehört

Aber ein eindrucksvolles Beispiel. Danke dafür!
Werde ich gleich in meine Code-Sammlung mit aufnehmen, wenn ich zu Hause bin und Andre sei gesagt, das das definitiv ein Kanditat fürs nächste CodeArchiv ist
Vielen Dank edel für deine Lehrstunde !!!!
Verfasst: 06.11.2007 19:24
von Fluid Byte
Ich hab keine Ahnung was er da zusammengehackt hat aber es funktioniert!

Verfasst: 06.11.2007 19:50
von edel
An der Adresse @EditorGadget() + 24 steht die Konstante die PB
an CreateWindow uebergibt. Damit man darauf zugreifen darf
muss man eben VirtualProtect bemuehen.
Ist mit vorsicht zu geniessen, denn Fred kann jeder Zeit die
Funktionen aendern. Von daher eher nichts fuer das CodeArchiv.
Verfasst: 07.11.2007 09:32
von CNESM
Ich bin trotzdem der Meinung, das es ins CodeArchiv gehört, vielleicht mit einem entsprechenden Hinweiss. Geht ja auch nicht unbedingt nur darum, eine Lösung zum Thema Multiline anzubieten, sondern auch die Vorgehensweise mittels VirtualProtect zu verdeutlichen. Da es scheinbar eine Vorgehensweise ist, die nicht jedem bekannt ist, sollte dies mit einem Beispiel verdeutlicht werden. Dann sollte aber auch der letzte Kommentar von edel mit rein, was der Code genau macht.