Fenster proportional verkeinern/vergrößern

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Fenster proportional verkeinern/vergrößern

Beitrag von kunstlust »

Ich habe eine Frage wie ich Fenster proportional verkeinern/vergrößern kann, so sollte zum Beispiel ein Editfeld verkeinernt/vergrößert werde Buttons aber nicht.
In Lazarus wird das mit einem Panel gemacht, indem ich eine Align setze und dies auch für das Edit/Memo Feld festlege.
Die Kompilerfunktion dpi-abhängige Anwendung wie in Lazarus gibt es glaube ich auch noch nicht, oder doch?

Das es leider kaum neue Beispiele auch zum Formdesigner gibt, nur ein relative kleiner Aufruf in der Hilfe, wollte ich fragen, ob jemand ein Einfache Bespiel dazu hat, wie zumindest ein Edits proportional verkeinern/vergrößern werden können.

Danke
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fenster proportional verkeinern/vergrößern

Beitrag von RSBasic »

@kunstlust
Willst du, dass die Breite deiner Gadgets automatisch an die Fenstergröße angepasst wird?
Sowas?

Code: Alles auswählen

EnableExplicit

Define EventID

If OpenWindow(0,0,0,200,100,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
  StringGadget(1, 10, 10, WindowWidth(0)-20, 20, "", 0)
  
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_SizeWindow
      ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(0)-20, #PB_Ignore)
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Oder willst du, dass die komplette Größe (Breite, Höhe, Schriftgröße) automatisch angepasst wird?
http://www.purebasic.fr/english/viewtop ... 54#p294054
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: Fenster proportional verkeinern/vergrößern

Beitrag von kunstlust »

@RSBasic
Dein Beispiel ist mir klar, ist aber für mich bei einer größeren Gui schnell unübersichtlich. Ich hatte die stille Hoffnung, das dies im Formdesigner eingebaut wurde, aber das ist wohl auch eine Frage ob es ein OOP-Sprache ist. Ich danke dir, auch für den weiteren Link. :mrgreen:
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fenster proportional verkeinern/vergrößern

Beitrag von RSBasic »

@kunstlust
Ich glaube nicht, dass der Visual Designer von Polo sowas anbietet, aber du kannst gerne im englischen Forum einen Thread oder eine PN an Polo schreiben.
Vielleicht setzt er das demnächst für dich um.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fenster proportional verkeinern/vergrößern

Beitrag von Kiffi »

Der neue VD hat in der Tat für sowas eine Funktionalität. Für Gadgets kann
man sogenannte Lock-Flags setzen (Left, Top, Bottom, Right). Der VD
erzeugt dann den entsprechenden Resize-Code.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: Fenster proportional verkeinern/vergrößern

Beitrag von kunstlust »

@Kiffi
Das hört sich gut an, das schaue ich mir mal an.

Grüße Kunstlust
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: Fenster proportional verkeinern/vergrößern

Beitrag von kunstlust »

@Kiffi
Ich habe mir das mal angeschaut und verstehe es nicht. :( Ohne Containerverbindung macht das doch keinen Sinn, also ich kann da keinen Effekt bemerken. Die Form will auch immer mein #PB_Window_SizeGadget nicht behalten...
Zum Beispiel ein Lock Top müsste doch eine sichtbaren Effekt machen, oder nicht? Hast du ein kleine Beispiel für mich?
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fenster proportional verkeinern/vergrößern

Beitrag von Kiffi »

kunstlust hat geschrieben:Ohne Containerverbindung macht das doch keinen Sinn, also ich kann da keinen Effekt bemerken.
Containerverbindung?

Ist doch eigentlich ganz einfach: Öffne eine neue Form und füge beispielsweise
einen Button hinzu. Diesem verpasst Du dann zusätzlich die Häkchen Lock_Right
und Lock_Bottom. Nun wechselst Du in die Code-Ansicht und kannst dort die neu
generierte Procedure ResizeGadgetsWindow_0() anschauen.

Aber der VD ist ohnehin momentan so buggy, dass man ihn (IMHO) nicht benutzen kann. :-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: Fenster proportional verkeinern/vergrößern

Beitrag von kunstlust »

@Kiffi

Das habe gemacht, aber wie ist es nun möglich Z.B. ein Bild und Editorfeld usw anders zu behandel als einen Button?
Ist ja super ne große graue Fläche zu haben, aber das macht ja kaum Sinn.
Ist die PB 5.2xx schon in Planung, gerade um das Handling des VD zu verbesern?
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fenster proportional verkeinern/vergrößern

Beitrag von Kiffi »

kunstlust hat geschrieben:aber wie ist es nun möglich Z.B. ein Bild und Editorfeld usw anders zu behandel als einen Button?
meinst Du das jetzt ernst? Dann füge anstelle des Buttons ein EditorGadget ein.

Hier mal ein kleines VD-generiertes Beispiel mit EditorGadget (Lock: Top, Left, Right, Bottom) und Buttons (Lock: Right, Bottom)

Code: Alles auswählen

Enumeration #PB_Compiler_EnumerationValue
  #Window_0
EndEnumeration

Enumeration #PB_Compiler_EnumerationValue
  #Editor_0
  #cmdCancel
  #cmdOK
EndEnumeration

Declare ResizeGadgetsWindow_0()

Procedure OpenWindow_0()
  OpenWindow(#Window_0, 0, 0, 472, 352, "TestFenster", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
  EditorGadget(#Editor_0, 8, 8, 456, 304)
  ButtonGadget(#cmdCancel, 368, 320, 96, 24, "Abbrechen")
  ButtonGadget(#cmdOK, 264, 320, 96, 24, "OK")
EndProcedure

Procedure ResizeGadgetsWindow_0()
  Protected WindowWidth, WindowHeight
  WindowWidth = WindowWidth(#Window_0)
  WindowHeight = WindowHeight(#Window_0)
  ResizeGadget(#Editor_0, 8, 8, WindowWidth - 16, WindowHeight - 48)
  ResizeGadget(#cmdCancel, WindowWidth - 104, WindowHeight - 32, 96, 24)
  ResizeGadget(#cmdOK, WindowWidth - 208, WindowHeight - 32, 96, 24)
EndProcedure

Procedure Window_0_Events(event)
  Select event
    Case #PB_Event_SizeWindow
      ResizeGadgetsWindow_0()
    Case #PB_Event_CloseWindow
      ProcedureReturn #False

    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect

    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure

OpenWindow_0()

Repeat
Until Window_0_Events(WaitWindowEvent()) = #False
Grüße ... Kiffi
a²+b²=mc²
Antworten