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! Bild

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.