Seite 1 von 4
Klassennamen ändern
Verfasst: 03.08.2012 13:27
von Lambda
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".
Re: Klassennamen ändern
Verfasst: 03.08.2012 13:40
von RSBasic
@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.
Re: Klassennamen ändern
Verfasst: 03.08.2012 13:58
von Lambda
Danke für die schnelle Antwort.
Kann man auch nicht mit gewinapi nachhelfen?
Re: Klassennamen ändern
Verfasst: 03.08.2012 15:13
von RSBasic
Wenn du den Klassennamen nachträglich ändern möchtest, ist das leider nicht möglich.
Re: Klassennamen ändern
Verfasst: 03.08.2012 20:45
von edel
Du kannst das Fenster "kopieren", und mit einem anderen Namen neu erstellen.
GELÖSCHT
Verfasst: 03.08.2012 21:36
von mirca
GELÖSCHT
Re: Klassennamen ändern
Verfasst: 04.08.2012 00:15
von c4s
Meine Güte, ist euch etwa PureBasic
peinlich?

GELÖSCHT
Verfasst: 04.08.2012 11:23
von mirca
GELÖSCHT
Re: Klassennamen ändern
Verfasst: 04.08.2012 15:54
von edel
Fuer "OpenWindow" kannst du folgenden Kot nehmen :
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()
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.
Re: Klassennamen ändern
Verfasst: 04.08.2012 17:38
von Josh
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.