Window oder Gadget neu zeichenen lassen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
mk-soft
Beiträge: 3856
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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

; ***************************************************************************************
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Window oder Gadget neu zeichenen lassen

Beitrag 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
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3856
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

ah, Danke :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3856
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

ah, Danke :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

ah, Danke :wink: :twisted:
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Re: Window oder Gadget neu zeichenen lassen

Beitrag 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.
I´a dllfreak2001
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Wie kann man eigentlich so einen Splitter erstellen, der in der PB-IDE benutzt wird?
I´a dllfreak2001
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten