Automatische Bildschirmanpassung

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von aligator.

    Automatische Bildschirmanpassung

    Hallo

    habe ein selbst geschriebenes Programm an einen Freund weitergegeben. Nun hat er einen anderen Monitor (4:3). Programmiert und ausgerichtet habe ich das auf einem 16:9 Monitor. Mein Freund sieht nun gut 2/3 in der Breite, die Höhe ist ok. Nun habe ich gegoogelt und so eine Bildschirmanpassung gefunden. Die Lage der Controls ist nun ok, aber er verringert die Schriftgrösse zu sehr, dass man kaum noch was lesen kann. Ein weiteres Problem ist, dass ich die vorhandenen Controls in verschieden Funktionen des Programmes nutze und sie immer wieder neu positioniere. Gibt es nicht eine Funktion (Basic oder Windows) die das von sich aus managet.
    Gruß Markus
    habe mir das mit der dock-funktion mal angeschaut. ich glaube ich programmiere falsch. also ich arbeite mit einer accsess-datenbank die immer 36 einträge hat. analog hat meine programmvorlage (die ich immer wieder benutze) 36 labels, textboxen, comboboxen und checkboxen. 18 links im bildschim angeordnet, 18 rechts. nach dem programmstart rufe ich die folgende sub auf (ausschnitt)

    VB.NET-Quellcode

    1. a = ""
    2. i = 0
    3. s = 0
    4. w = 100
    5. h = 20
    6. t = 75
    7. tl = 78
    8. l = 35
    9. schrift = "Arial"
    10. sg = 8
    11. v = False
    12. For i = 1 To 18
    13. t = t + 32
    14. tl = tl + 32
    15. s = s + 1
    16. Me.Controls("Label" & s.ToString).Left = l
    17. Me.Controls("Label" & s.ToString).Text = aMe.Controls("Label" & s.ToString).Height = h
    18. Me.Controls("Label" & s.ToString).Width = wMe.Controls("Label" & s.ToString).Top = tl
    19. Me.Controls("Label" & s.ToString).Font = New Font(schrift, sg, FontStyle.Bold)
    20. Me.Controls("Label" & s.ToString).Enabled = True
    21. Me.Controls("Label" & s.ToString).Visible = v
    22. next


    das gleiche dann nun für die labels 19-36 nur mit anderen left-werten.

    nun verschiebe ich die controls in einer Programmfunktion. Nach Abarbeitung der Programmfunktion rufe ich wieder die o.a. Sub auf und die Controls positionieren sich wieder alle auf Ausgangsposition, welche in den meisten Anwendungen auch übernommen werden können. Denke das ich hier mit dock nicht weiterkomme.
    Gruß Markus
    danke,

    denke es wird mir aber nicht wirklich was bringen. werde hier und da eine left angabe für ein control benutzen müssen. und dies wirkt sich halt bei einer anderen bildschirmauflösung anders aus. sehe das im umgekehrten fall. gebe ich 1024 x 768 für den 4:3 monitor als basis vor, bleibt bei einer auflösung von 1.280 x 768 für den 16 : 9 monitor etwa 1/3 des bildschirmes unbenutzt. das problem habe ich doch sicherlich nicht alleine.
    Gruß Markus
    doch, hast du ... jedes andere Programm hat die Controls mit Anchors an bestimmte Positionen um somit die Größe dynamisch zu haben
    danke, möchte ja dazu lernen.

    das bedeutet, dass ich für jede Programmfunktion eine eigene Form benötigen würde. Zum Beispiel habe ich ein kleines Mieterverwaltungs-Programm. Kann man Mieter, Vermieter, Wohungen usw. anlegen, korrigieren und löschen. Zur Zeit mache ich das alles in einer Form und positioniere mir die vorhandenen Controls vertikal dorthin, wo ich sie gerade in der Programmfunktion benötige. So kann es sein, dass die Textbox3 in der einen Programmfunktion grösser ist als in einer anderen. Auch die vertikale Position kann in den unterschiedlichen Funktionen variieren. Um das mit der Bildschirmanpassung zu realisieren, dürften die Controls nicht mehr verändert werden.
    Gruß Markus
    so siehts aus. Du kannst nie alles in eine Form auslagern, außer mit Tabs, aber das ist wieder nicht so dynamisch. Fertige dir einfach ein paar Dialoge an.

    Westerwälder schrieb:

    da wächst der programmieraufwand mal schnell um das 10 fache. denn der meiste zeitaufwand geht (zu mindest bei mir) in die grafische Darstellung des Programmes.
    Dafür gibs doch den Designer :rolleyes:.
    Und die eigenschaft Dock :D wie oben schon beschrieben.
    Den erhöhten Programmieraufwand kann ich mir nur erklären wenn man Spagetticode schreibt, statt mit Klassen zu arbeiten.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Ja sicher, auch auf die Gefahr hin, dass es nicht nach den hier üblichen Programmierstandards gelöst wurde. Wie gesagt, dass entsprechende Programm ist fertig und soll bei einem Freund auf einem anderen Monitor laufen. Ich rufe nach dem Programmstart folgende sub auf:

    VB.NET-Quellcode

    1. Sub Bildschirmanpassung()
    2. Dim VorgabeX As Short = 1280
    3. Dim VorgabeY As Short = 768
    4. Dim VorgabeS As Short = 8 ' Schriftgrsse
    5. Dim IstX, IstY As Double
    6. ' Auslesen der Ist-Werte des Monitors
    7. IstX = (Screen.PrimaryScreen.Bounds.Width)
    8. IstY = (Screen.PrimaryScreen.Bounds.Height)
    9. ' Differenz zu dem aktuellen Monitor berechnen
    10. Breite = (Screen.PrimaryScreen.Bounds.Width / VorgabeX)
    11. Hoehe = (Screen.PrimaryScreen.Bounds.Height / VorgabeY)
    12. Schriftgrsse = (VorgabeS * Breite)
    13. End Sub



    Die Anpassung der Controls berechne ich dann da, wo ich es benötige

    VB.NET-Quellcode

    1. With Label_Programmbeschreibung
    2. .Left = 170 * Breite ' hier
    3. .Height = 25 * Höhe ' hier.
    4. Font = New Font("Arial", Schriftgrösse, FontStyle.Bold, GraphicsUnit.Point) ' hier
    5. .Top = 7 * Höhe ' hier
    6. .Width = 300 * Breite ' und hier
    7. .Text = ProgrammBeschreibung
    8. End With


    Da ich die Controls manuell positioniere ist es ein geringer Aufwand, die entsprechende Berechnung zum Fremdmonitor anzuhängen. So brauche ich nicht für jede Programmfunktion eine neue Form einzufügen.

    Wie gesagt, ich habe das Programmieren in den 80 ziger Jahren erlernt (GWBASIC). Das war noch keine objektbezogene Programmiersprache. Ist ja kaum noch einsetzbar und wenn dann nur unter Dosbox sehr umständlich. Habe mir zwei Büch zugelegt (Einstieg in VB 2008 von Thomas Theis und VB 2008 Einfach programmieren lernen Markt + Technik) aber da steht sowas ja gar nicht drin.

    Sicherlich programmiert man dann "Spaghetti-Code" wenn man es nicht anders weis.

    Allen nochmal vielen Dank
    Gruß Markus
    Sicherlich programmiert man dann "Spaghetti-Code" wenn man es nicht anders weis.



    wichtigster Tipp in diesem Forum:

    Galileo openbook:
    VB2008

    (gibts meherere bücher dort)

    da is des super erklärt mit der Objektorientierung.
    :P Mfg Aligator :P