Fensterinhalte der Fenstergröße anpassen



  • Ich glaub ich hab mich ein bischen unverständlich ausgedrückt.

    wie und womit ich das umsetzte ist mir klar. so im test mit 2-3 buttons funzt das auch. aber es ist halt nervig von allen komponenten erst mal die "original" größe zu speichern.

    FormBreite=800; //
    ButtonBreite=105; // Die Werte muss ich vorher speichern
    Button1->Width=ButtonBreite*(float)Form2->ClientWidth/(Form2->ClientWidth/FormBreite);
    

    Die zeile ist jetzt nur um die breite einzustellen. das ganze jetzt noch mal für die high, left und top.

    Es geht sich daraum das ich mein programm für eine Auflösung von 1280*1024 ausgelegt habe. aber nun beschweren sich die schlaptop user das die die auslösung nicht packen und immer scollen ist auch blöd.

    Also muss eine andere lösung her. und nu it die frage ob es einen besseren weg gibt als wie beschrieben.
    🙂
    Danke



  • statisch anlegen (also eine einstellmöglichkeit der auflösung)
    *duck und weg*



  • Hallo

    Genau dafür gibt es ja eigentlich Anchor, Align und Constraint. Damit kann man sehr einfach ein anpassbares Design erzeugen.
    Das was du da vorhast ist im Gegenteil dazu eine unnötige manuelle Fummelei.

    Dazu mußst du ja auch bedenken das du ja gar nicht pauschal alle Komponenten um 5% verkleinern kannst. Bei einer großen ListBox ist das ja okay, bei einem Button in den grad so die Beschriftung und/oder Icon passt geht das aber nicht.

    bis bald
    akari



  • Ich denke mal das die '5%' als Beispiel gedient haben.
    Er macht das mit einem Dreisatz.

    Button1->Width=ButtonBreite*(float)Form2->ClientWidth/(Form2->ClientWidth/FormBreite);
    

    Edit: warte mal...

    FormBreite=800; //
    ButtonBreite=105; // Die Werte muss ich vorher speichern
    

    die hast du doch schon (Form1->ClientWidth und Butten->Widht) 😕 😕 😕

    Edit2:
    Dreisatz: a/b = y/x => b * y / a = x
    und nicht x * y / (y / x) = x



  • Das mit den 5% war nur ein beispiel. ging sich nur ums prinzip.

    akari hat mich mal wieder dazu bewegt genauer hin zu gucken.

    Hab bis eben noch gedacht das meine verwendeten komponeten anchors, align, etc. nicht unterstützen. hab aber gerade gesehen das die nur NICHT im Objektinspektor angezeigt werden aber dennoch vorhanden sind.

    Gibt es eine gescheite Anleitung wie man die funktionen benutzt?



  • Hallo

    Das sind nur Eigenschaften, keine Funktionen. Du must also nur eine passende Option auswählen und zuweisen.
    Genaue Beschreibung gibts in der BCB-Hilfe bei TControl::<Eigenschaft>

    bis bald
    akari



  • Also vielleicht könnt ihr mir mal kurz hilfestellung geben damit ich das auch raffe.

    ich hab mir jetzt nal 2 Panel genommen um das zu testen.

    Ein pannel setzte ich auch die linke seite und ein anderes auf die rechte.

    was muss ich jetzt einstellen, damit sich von beiden panels die größe ändert wenn ich die größe vom fomular änder?

    Egal was ich da einstelle, der macht das nicht so wie ich das will. 😞



  • Also ich hab das jetzt Gestern auf verschiedene Arten probiert, aber ich bekomme es nicht hin das die Panels sich Proportional zur form vergößern. 😞



  • Bei den beiden Panels mußt du dann einfach die Anchors auf alle vier Seiten setzen, d.h.

    Panel1.Anchors = TAnchors() << akTop	<< akLeft << akRight << akBottom;
    // same for Panel2
    

    Align dann jeweils auf alNone.

    Je nachdem wie dein Formular aufgebaut ist, macht es meistens Sinn 1 Element mit Align = alFill zu haben, welches dann entsprechend vergrößert oder verkleinert wird (z.B. bei einem Texteditor die Textbox oder beim Explorer die rechte ListView).



  • Das funktioniert auch nicht.

    Panel 1 (linke seite) schiebt sich bei Vergrößerung immer unter Panel2 (rechte seite). Bei verkleinerung entsteht eine Lücke. 😞 😞 😞

    Das muss doch irgendwie zu machen sein das die proportional bleiben. 😕

    alFill gibt es nicht bei BCB2007.



  • Hi,

    Panel1->Align = alLeft;
    Panel2->Align = alClient;
    

    mfg, Micha



  • Vielleicht schaffen wir es ja noch. hat jemand noch ne idee? 🙂

    ich hab jetzt:

    Panel1->Align = alLeft; 
    Panel2->Align = alClient;
    Panel1->Anchors = TAnchors() << akTop    << akLeft << akRight << akBottom;
    Panel2->Anchors = TAnchors() << akTop    << akLeft << akRight << akBottom;
    

    in der variante Passt sich Panel1 (links) der größe an und Panel 2 (rechts) bleibt auf der festen breite. 😞



  • Die "Trennlinie" zwischen den Panels lässt sich nicht automatisch mitverschieben, deren Position musst du berechnen und anpassen.

    void __fastcall TForm1::FormResize(TObject *Sender)
    {
      Panel1->Width = Form1->Width / 2;
    }
    

    alLeft + alClient und Anchors auf Standard.


Anmelden zum Antworten