Klassennamen ändern
Klassennamen ändern
Ist es möglich die Namen der Steuerelemente zu ändern? Wenn man eine Anwendung mit bspw WinCheat betrachtet heißen sie dort alle PB_String... etc.
Zum einem möchte ich ein eigenes Gadget (CanvasGadget) gerne selbst benennen und alle anderen Steuerelemente ebenfalls lesbar beschriften. Statt einem "PB_Editor" z.B ein "Editor_Description".
Zum einem möchte ich ein eigenes Gadget (CanvasGadget) gerne selbst benennen und alle anderen Steuerelemente ebenfalls lesbar beschriften. Statt einem "PB_Editor" z.B ein "Editor_Description".
Re: Klassennamen ändern
@cOoki3druqs
Das ist soweit ich weiß nicht möglich, den Klassennamen nachträglich zu ändern. Wenn du CreateWindow(Ex) nutzt, kannst du einen eigenen Klassennamen verwenden.
Das ist soweit ich weiß nicht möglich, den Klassennamen nachträglich zu ändern. Wenn du CreateWindow(Ex) nutzt, kannst du einen eigenen Klassennamen verwenden.
Re: Klassennamen ändern
Danke für die schnelle Antwort.
Kann man auch nicht mit gewinapi nachhelfen?
Kann man auch nicht mit gewinapi nachhelfen?
Re: Klassennamen ändern
Wenn du den Klassennamen nachträglich ändern möchtest, ist das leider nicht möglich.
Re: Klassennamen ändern
Du kannst das Fenster "kopieren", und mit einem anderen Namen neu erstellen.
Re: Klassennamen ändern
Meine Güte, ist euch etwa PureBasic peinlich?
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Re: Klassennamen ändern
Fuer "OpenWindow" kannst du folgenden Kot nehmen :
Es soll nur als Beispiel dienen. Bisher gab es auch keine Probleme, was aber nicht heisst, dass sie nicht doch existieren
Edit: ach... man sollte seinen Code auch testen
Mit einer neuen PB Version siehts schlecht aus, aber ich schau nochmal rein.
So, jetzt sollte es funktionieren.
Code: Alles auswählen
Import "window.lib"
CompilerIf #PB_Compiler_Unicode
_PB_Window_ProcessEvent(a,b,c,d) As "_PB_Window_ProcessEvent_UNICODE@16"
CompilerElse
_PB_Window_ProcessEvent(a,b,c,d) As "_PB_Window_ProcessEvent@16"
CompilerEndIf
PB_Window_NonBlockResizeInit()
PB_Window_Icon
PB_Window_Cursor
PB_Window_Objects
PB_Object_GetOrAllocateID(*Object,id)
EndImport
Procedure NewOpenWindow(id,x,y,cx,cy,title.s,flags=#WS_VISIBLE|#WS_OVERLAPPEDWINDOW,parent=0)
Protected wnd.wndclass
Protected classname.s = "MY_OWN_CLASS"
Protected *WinObj.integer
Protected hWnd.i
Protected rc.rect
With wnd
\style = #CS_HREDRAW|#CS_VREDRAW
\lpfnWndProc = @_PB_Window_ProcessEvent()
\hInstance = GetModuleHandle_(0)
\hIcon = PB_Window_Icon
\hCursor = PB_Window_Cursor
\lpszClassName = @classname
\hbrBackground = #COLOR_WINDOW
\cbWndExtra = 0
\cbClsExtra = 0
EndWith
If RegisterClass_(wnd)
SetRect_(rc,0,0,cx,cy)
AdjustWindowRectEx_(rc,flags,0,#WS_EX_WINDOWEDGE)
If x = #PB_Ignore Or y = #PB_Ignore
x = #CW_USEDEFAULT
y = #CW_USEDEFAULT
EndIf
PB_Window_NonBlockResizeInit()
hWnd = CreateWindowEx_(#WS_EX_WINDOWEDGE,classname,title,flags,x,y,rc\right-rc\left,rc\bottom-rc\top,parent,0,GetModuleHandle_(0),0)
If hWnd
*WinObj = PB_Object_GetOrAllocateID(PB_Window_Objects,id)
*WinObj\i = hWnd
If id = #PB_Any
SetProp_(hWnd,"Pb_WindowID",*WinObj+1)
Else
SetProp_(hWnd,"Pb_WindowID",id+1)
EndIf
UseGadgetList(hWnd)
Else
UnregisterClass_(GetModuleHandle_(0),classname)
EndIf
EndIf
If id = #PB_Any
id = *WinObj
Else
id = hWnd
EndIf
ProcedureReturn id
EndProcedure
Procedure Main()
NewOpenWindow(0,#PB_Ignore,#PB_Ignore,200,200,"333")
ResizeWindow(0, #PB_Ignore, #PB_Ignore, 500, 500)
ButtonGadget(0, 10, 10, 100, 30, "sdfsfd")
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
EndProcedure:Main()
Edit: ach... man sollte seinen Code auch testen
Mit einer neuen PB Version siehts schlecht aus, aber ich schau nochmal rein.
So, jetzt sollte es funktionieren.
Re: Klassennamen ändern
Nur so eine Idee, ungetestet. Mit einem Hexeditor in der fertigen exe nach den Klassennamen suchen und ersetzen. Solange du die Länge nicht änderst, sollte es egal sein, wie das Ding heißt.