Grösse und Form von Labeln und Buttons u.s.w relativ zur Formgrösse

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Grösse und Form von Labeln und Buttons u.s.w relativ zur Formgrösse

    Hallo,















    als Umsteiger von VB6 bin ich neu hier und habe gleich eine Frage:



















    Ich möchte eine Form erstellen, die einige Labels, Buttons u.s.w. enthält. Wenn ich die Grösse dieser Form ändere soll sich die Grösse der Labels u.s.w. entsprechend mitändern, ebendso die Position. Auch natürlich die Textgrösse in den Labels. Also eigentlich eine Art Zoom-Effekt in Abhängigkeit von der Formgrösse. Ist sowas für ca. 50 verschiedenen Elemente in einer Form machbar bei erträglichem Auffwand?











    Habe es mit Ancor und Dock probiert, aber das funktioniert nicht. Bei Ancor ist z.b. die Grössenänderung viel zu heftig. Mit Button.Size=Me.Size - irgendwas komme ich auch nicht wirklich weiter.



















    Perfect wäre eine Sub, so in dem Stil Zoom Button1 125 , um den Button auf 125% der Normalgrösse zu bringen.











    Letzendlich möchte ich eine Anzeige für ein Boeing 787-Homecockpit erstellen, die z.b. so aussieht

















    Uploaded with ImageShack.us













    aber grössenveränderlich sein muss. Bin für jeden Tip dankbar :)
    Man(n) kann auch ohne Hunde leben, aber es lohnt nicht (Heinz Rühmann)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Skino“ () aus folgendem Grund: Bild hat nicht gepasst

    @Skino: Soll das auch funktionsfähig sein? Steht dafür schon ein Grundgerüst? Wenn nein, würde sich hierfür vielleicht GDI+ anbieten. Du zeichnest alles nötige auf ein Bitmap, welches du entsprechend der Formgröße/Bildschirmgröße generierst bzw. aufzoomen könntest.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    willst du nicht lieber mit was kleinerem anfangen?

    Die Lösung bestünde in Ownerdrawing, und zwar ziemlich listig eingesetzt.

    Direkte Samples dazu kenn ich natürlich nicht, aber nur für den Eindruck, wie verschiedenartig Ownerdrawing aussehen kann:
    Ownerdrawn ChartControl
    Gezieltes OwnerDrawing

    wie gesagt: IMO nix für Anfänger. Wennde VB.Net lernen möchtest: dieses Buch Lesen
    Hallo, danke für die schnellen Antworten.
    Ja, das soll funktionsfähig sein und ein Grundgerüst steht noch nicht, da die Zoombarkeit die Grundbedingung ist. Die Idee mit dem GDI ist sicher gut, wenn ich im Moment auch nicht weiss wie es gehen soll.

    Was ich vergessen habe zu erwähnen, die Grössenänderung der Form muss nicht per Maus erfolgen, das ginge auch mit Tasten. W und S für Grösser und kleiner, A und D schmaler und Breiter. So hatte ich das in VB6 gemacht, in dem ich mit den Tasten eine Art Multiplikator erhöht/vermindert habe. Das war aber zu ungenau, so das sich bei grösseren Änderungen das Layout stark verschoben hatte.

    Ich sehe, das mein erster Post grosse Lücken hat. Könnte an meinem Opera liegen, da hat so manches Forum ein Problem :)

    Mit was kleinerem hatte ich vor langer Zeit angefangen und ich wäre in VB6 auch in der Lage das zu realisieren, ist jedoch recht aufwändig. Und VB6 läuft leider unter Win7 nicht mehr, deshalb auch VB2008. Das ist ja doch in vielem anders. Deshalb dachte ich, es gibt bereits eine Art Zoom-Funktion, da das bei Windowsanwendungen Standard ist. Wollte das Rad nicht neu erfinden :)
    Man(n) kann auch ohne Hunde leben, aber es lohnt nicht (Heinz Rühmann)

    ErfinderDesRades schrieb:

    Die Lösung bestünde in Ownerdrawing, und zwar ziemlich listig eingesetzt.

    Bei 50 Controls, das müsstest Du mal bitte näher erläutern ? Ansonsten im Folgenden eine etwas einfachere Methode .... ob es sinnvoll ist lassen wir einmal dahingestellt.

    Dennoch: meist will man ja nicht alle Controls zoomen, sondern nur wichtige Bereiche, da reichen die normalen Mittel mit Layout-(Split) Panel und Anchoring allemal aus.

    Für weitergehende Lösungen musst Du schon mehr investieren, auf jeden Fall auch Deine Anforderungen klarer formulieren.

    Gehen wir mal von einer "ich zoome alles gleich"-Vorstellung aus: Schlüssel ist hier das Form.Resize Event, wie von SystemUnknow schon erwähnt. Vorgehensweise
    - beim Laden der Form die Default-Grösse/Position der Controls merken, z.B. im TAG jedes Controls. Das ist ein Objekt, kann sich also auch Strukturen merken.
    - bei einem Resize Event wird der Zoom-Faktor Horizontal/Vertikal der Form ermittelt
    - mittels Schleife wird die Controls Collection durchlaufen und per Control die Position / Grösse des Ausgangszustandes mit dem Zoomfaktor multipliziert
    - Limits für das Zoomen kann man hier implementieren, allerdings würde es dann auch Sinn machen Min/Max Grössen der Form vorzugeben

    Damit werden zunächst nur die direkt auf der Form befindlichen Controls erfasst, ansonsten muss das halt rekursiv geschehen.

    GDI ist ja ganz nett und schön, nur dachte ich es ginge hier um Controls mit den damit verbundenen Events

    Kangaroo schrieb:

    GDI ist ja ganz nett und schön, nur dachte ich es ginge hier um Controls mit den damit verbundenen Events

    Es geht um beides - sieht man doch auf dem Bild. Und ich bezog mich halt auf die Grafik, die sicherlich ein recht komplexes Datenmodell visualisiert.
    Das mitte controls ist IMO eine andere Baustelle auf der Baustelle, und wie du sagst: müssteman diskutieren, wie sinnvoll controls sind, bei denen zB die beschriftung mitgezoomt wird - my opinion: nicht sinnvoll.
    Schriftgrößen soll man so einstellen, dass man sie gut lesen kann, und dann sollen sie so groß bleiben. Ich will keine Riesen-Buchstaben, und will auch keine Fuzzelschrift.