Seite 2 von 3

Verfasst: 11.05.2009 18:32
von mk-soft
Bis jetzt habe ich immer nur auf SizeWindow reagiert und hat immer funktiert. Warum sollte ich auf MoveWindow reagieren?

Standard Baustein für Testprogramme.

Code: Alles auswählen

;-TOP

EnableExplicit

;- Konstanten
Enumeration ; Window ID
  #Window
EndEnumeration

Enumeration ; Menu ID
  #Menu
EndEnumeration

Enumeration ; MenuItem ID
  #Menu_Exit
EndEnumeration

Enumeration ; Statusbar ID
  #Statusbar
EndEnumeration

Enumeration ; Gadget ID
  #List_Log
EndEnumeration

; ***************************************************************************************

;- Declare Functions
Declare UpdateWindow()
Declare WriteLog(text.s)

;- Globale Variablen
Global exit = 0

Procedure main()

  Protected event, winstyle
  
  ;- Fenster
  winstyle = #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget
  If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 400, 300, "Fenster", winstyle)
    ; Menu
    If CreateMenu(#Menu, WindowID(#Window))
      MenuTitle("&Datei")
        MenuItem(#Menu_Exit, "Be&enden")
    EndIf
    ; Statusbar
    CreateStatusBar(#Statusbar, WindowID(#Window))
    ; Gadgets
    If #True ; CreateGadgetList(WindowID(#Window))
      ListViewGadget(#List_Log, 0,0,0,0)
    EndIf
    
    ;-- Hauptschleife
    Repeat
      event   = WaitWindowEvent()
      Select event
        Case #PB_Event_Menu
          Select EventMenu()
            Case #Menu_Exit
              exit = 1
          EndSelect
        Case #PB_Event_Gadget
          Select EventGadget()
          
          EndSelect
        Case #PB_Event_CloseWindow
          Select EventWindow()
            Case #Window : exit = 1
          EndSelect
        Case #PB_Event_SizeWindow
          Select EventWindow()
            Case #Window : UpdateWindow()  
          EndSelect
      EndSelect
      
    Until Exit
  EndIf
EndProcedure:main()

; ***************************************************************************************

Procedure UpdateWindow()

  Protected x,y,dx,dy
  Protected mn,st,tb
  
  x = 0
  y = 0
  mn = MenuHeight()
  st = StatusBarHeight(#StatusBar)
  ;tb = ToolBarHeight(#ToolBar)
  dx = WindowWidth(#Window)
  dy = WindowHeight(#Window) - mn - st - tb
  ResizeGadget(#List_Log, x, y, dx, dy)
  
EndProcedure

; ***************************************************************************************

Procedure WriteLog(text.s)
  Protected temp.s
  temp = FormatDate("%YYYY.%MM.%DD %HH:%II:%SS - ", Date()) + text
  AddGadgetItem(#List_Log, -1, temp)
  If CountGadgetItems(#List_Log) > 500
    RemoveGadgetItem(#List_Log, 0)
  EndIf
EndProcedure

; ***************************************************************************************

Re: Window oder Gadget neu zeichenen lassen

Verfasst: 11.05.2009 18:33
von Kiffi
@dllfreak2001: Ich hatte vor kurzem ein ähnliches Problem und meine
Konsequenz daraus ist, dass ich nun den nxSplitter von srod verwende.

Hier nochmal der komplette Thread zum Nachlesen:
http://www.purebasic.fr/german/viewtopic.php?t=19208

Grüße ... Kiffi

Verfasst: 11.05.2009 18:37
von ts-soft
> Bis jetzt habe ich immer nur auf SizeWindow reagiert und hat immer funktiert
Maximieren erzeugt ein Move + Size, Splitter-Bewegung erzeugt nur ein Move.

Rebar erzeugt auch ein Move.

Wenn ich nicht auf Move reagiere sehen manche Programme von mir sehr
merkwürdig aus, vor allem wenn ich die Styles wegen Flicker Flacker noch
angepaßt habe.

Verfasst: 11.05.2009 18:39
von mk-soft
ah, Danke :wink:

Verfasst: 11.05.2009 18:39
von mk-soft
ah, Danke :wink:

Verfasst: 11.05.2009 18:56
von Fluid Byte
ah, Danke :wink: :twisted:

Verfasst: 11.05.2009 19:00
von ts-soft
ah, Danke :wink: :twisted: :mrgreen:

Den Splitter von srod würde ich ja gerne nehmen, aber der ist nicht x64 tauglich :(

Aber Fluid Byte wird bestimmt einen passenden Splitter basteln 8)

Re: Window oder Gadget neu zeichenen lassen

Verfasst: 11.05.2009 19:01
von dllfreak2001
Kiffi hat geschrieben:@dllfreak2001: Ich hatte vor kurzem ein ähnliches Problem und meine
Konsequenz daraus ist, dass ich nun den nxSplitter von srod verwende.

Hier nochmal der komplette Thread zum Nachlesen:
http://www.purebasic.fr/german/viewtopic.php?t=19208

Grüße ... Kiffi
Kiffi, danke für die Links... genau das Problem wie du dort gehabt hast habe ich auch grad.

Allerdings habe ich dann das gleiche Problem wie ts-soft...
Ich denke mit

Code: Alles auswählen

InvalidateRect_(hwnd,0,1)
wird es auch gehen, zumal das nur ein Leveleditor ist und kein Word oder Photoshop.
Hauptsache ist, dass das Panelgdget nicht mehr verschwindet wenn man an einer Ecke zuppelt.

Edit:
Ich denke doch mit

Code: Alles auswählen

hWnd = WindowID(#Window)
liege ich richtig. Aber so passiert nichts.
Schreibe ich aber anstatt hWnd eine "0" rein flackert es zwar aber wird nach dem Vergrößern/Verkleinern immer noch korrekt angezeigt.

Edit2:
Ok, das geht so wohl doch nicht, weil mit "0" als hWnd refresht der mir alles auch andere Fenster. Aber ich denke das wusstet ihr schon.

Verfasst: 11.05.2009 20:46
von dllfreak2001
Wie kann man eigentlich so einen Splitter erstellen, der in der PB-IDE benutzt wird?

Verfasst: 11.05.2009 21:03
von ts-soft
dllfreak2001 hat geschrieben:Wie kann man eigentlich so einen Splitter erstellen, der in der PB-IDE benutzt wird?
Die verwendet tatsächlich keinen Splitter. Ermittle einen Container :freak:
Anscheinend wird ein schmaller Container verschoben und danach die
Controls resized.