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. :D

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? :freak:

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.