Kein Multiline für Editorgadget - andere (kürzere) Lösung?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Hmm, es gibt vielleicht noch ne Möglichkeit.

Moment mal...
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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 
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag 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 !!!!
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ich hab keine Ahnung was er da zusammengehackt hat aber es funktioniert! Bild
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag 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.
Antworten