Aktuelle Zeit: 24.08.2019 09:02

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Autor Nachricht
 Betreff des Beitrags: Re: Klassennamen ändern
BeitragVerfasst: 20.03.2019 08:09 
Offline

Registriert: 16.03.2006 11:20
Hm...

...bei mir meckert PB wegen PB_Window_NonBlockResizeInit() herum, bin mir nicht sicher, ob das Weglassen unangenehme Nebeneffekte haben könnte...

...etwas unangenehmer ist jedoch, dass bei 32 Bit/Unicode der Fenstertitel als "3" und nicht als "333" übernommen wird.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Klassennamen ändern
BeitragVerfasst: 21.03.2019 00:37 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Habe mich mal mit den Problem beschäftigt.

Das mit den Titel fehler ist nur mit der Version von PB < 5.50 vorhanden...

Hier mal alles etwas überarbeitet und mit den FIX für die 32bit Version und Unicode (PB-v5.46)

P.S. Es werden nicht alle Styles von PB unterstützt...

Update v1.02
- Hatte vergessen die PB-Version abzufragen

Code:
;-TOP

; Comment : Open window with own classname
; Authors : Edel, ts-soft, mk-soft
; Version : v1.02
; Create  : 04.08.2012
; Update  : 21.03.2019
; OS:     : Windows

EnableExplicit

CompilerIf #PB_Compiler_Version < 550
  CompilerIf #PB_Compiler_Unicode
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
      Import "user32.lib"
        CreateWindowEx_(dwExStyle,lpClassName.p-unicode,lpWindowName.p-ascii,dwStyle,X,Y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam) As "_CreateWindowExW@48";
        RegisterClass_(class) As "_RegisterClassW@4"
        UnregisterClass_(handle, ClassName.p-unicode) As "_UnregisterClassW@8"
      EndImport
    CompilerElse
      Import "user32.lib"
        CreateWindowEx_(dwExStyle,lpClassName.p-unicode,lpWindowName.p-ascii,dwStyle,X,Y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam) As "CreateWindowExW";
        RegisterClass_(class) As "RegisterClassW"
        UnregisterClass_(handle, ClassName.p-unicode) As "UnregisterClassW"
      EndImport
    CompilerEndIf
  CompilerEndIf
CompilerEndIf

Import "window.lib"
  PB_Window_ProcessEvent(a,b,c,d)
  PB_Object_GetOrAllocateID(*Object,id)
  PB_Window_Icon
  PB_Window_Cursor
  PB_Window_Objects
EndImport

Procedure OpenWindowEx(Window, x, y, Width, Height, ClassName.s, Title.s, Flags=0, Parent=0)
  Protected wnd.wndclass, rc.rect, *WinObj.integer, hWnd.i, r1
 
  If Not Flags
    Flags = $14C80000
  Else
    Flags | $14000000
  EndIf
 
  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)
    ; Adjust Window
    SetRect_(rc,0 ,0 , Width, Height)
    AdjustWindowRectEx_(rc, Flags, 0, #WS_EX_WINDOWEDGE)
    ; Set defaults
    If x = #PB_Ignore Or y = #PB_Ignore
      x = #CW_USEDEFAULT
      y = #CW_USEDEFAULT
    EndIf   
    ; Create window
    hWnd = CreateWindowEx_(#WS_EX_WINDOWEDGE,classname,title,flags,x,y,rc\right-rc\left,rc\bottom-rc\top,parent,0,GetModuleHandle_(0),0)
    ; Add window object
    If hWnd
      *WinObj   = PB_Object_GetOrAllocateID(PB_Window_Objects, Window)
      *WinObj\i = hWnd
      If Window = #PB_Any
        SetProp_(hWnd, "PB_WindowID", *WinObj + 1)
      Else
        SetProp_(hWnd, "PB_WindowID", Window + 1)
      EndIf
      UseGadgetList(hWnd)
    Else
      UnregisterClass_(GetModuleHandle_(0),ClassName)
    EndIf
  EndIf
  ; Result
  If Window = #PB_Any
    r1 = *WinObj
  Else
    r1 = hWnd
  EndIf
  ProcedureReturn r1
EndProcedure

;- Test

Procedure Main()
  Protected win1, style
  style = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  win1 = OpenWindowEx(1, #PB_Ignore, #PB_Ignore ,200 ,200 ,"MyOwnApp", "Title", style)
  ;win1 = OpenWindow(1, #PB_Ignore, #PB_Ignore ,200 ,200 , "Title", style)
  ResizeWindow(1, #PB_Ignore, #PB_Ignore, 500, 500)
  ButtonGadget(0, 10, 10, 160, 30, "Find ClassName")
  ButtonGadget(1, 10, 50, 160, 30, "Find Title")
 
  ;SetWindowTitle(1, "Hallo")
  SetWindowColor(1, $FFFF00)
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0
            If FindWindow_("MyOwnApp", 0)
              MessageRequester("Search", "Find over ClassName" + #LF$ + "PB-WindowID = " + GetProp_(WindowID(1), "PB_WindowID"))
            Else
              MessageRequester("Search", "Not find over ClassName")
            EndIf
          Case 1
            If FindWindow_(0, "Title")
              MessageRequester("Search", "Find over Title" + #LF$ + "PB-WindowID = " + GetProp_(WindowID(1), "PB_WindowID"))
            Else
              MessageRequester("Search", "Not find over Title")
            EndIf
        EndSelect
    EndSelect
  ForEver
EndProcedure : Main()

End

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Zuletzt geändert von mk-soft am 21.03.2019 10:33, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Klassennamen ändern
BeitragVerfasst: 21.03.2019 10:30 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Update v1.02
- Hatte vergessen die PB-Version abzufragen

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye