Klassennamen ändern

Für allgemeine Fragen zur Programmierung mit PureBasic.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Klassennamen ändern

Beitrag 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".
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Klassennamen ändern

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: Klassennamen ändern

Beitrag von Lambda »

Danke für die schnelle Antwort. :D

Kann man auch nicht mit gewinapi nachhelfen?
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Klassennamen ändern

Beitrag von RSBasic »

Wenn du den Klassennamen nachträglich ändern möchtest, ist das leider nicht möglich.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Klassennamen ändern

Beitrag von edel »

Du kannst das Fenster "kopieren", und mit einem anderen Namen neu erstellen.
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

GELÖSCHT

Beitrag von mirca »

GELÖSCHT
Zuletzt geändert von mirca am 17.10.2013 11:21, insgesamt 1-mal geändert.
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Klassennamen ändern

Beitrag von c4s »

Meine Güte, ist euch etwa PureBasic peinlich? :freak:
"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
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

GELÖSCHT

Beitrag von mirca »

GELÖSCHT
Zuletzt geändert von mirca am 17.10.2013 11:21, insgesamt 1-mal geändert.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Klassennamen ändern

Beitrag 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.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Klassennamen ändern

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