vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Fenster automatisch in der Grösse anpassen 
Autor: crosstravel
Datum: 27.07.18 09:58

Hallo,

wir haben ein Programm entwickelt, um die Disposition von Fahrzeugen und Fahrern zu erleichtern. Für die
Darstellung der Balkenzeilen usw. haben wir das Grid eingesetzt.

Jetzt ist es so, dass ein Kunde extra für diese Disposition einen 27 Zoll Bildschirm angeschafft hat.
Das Programm wurde aber für einen 19 Zoll entwickelt. Entsprechend klein wird die Maske nun angezeigt.
Gibt es eine Möglichkeit, dass die Maske automatisch auf ca. 90% des verfügbaren Bereiches vergrössert
wird? Ich stelle mir vor, dass im Form_Load die Grösse des Bildschirmes abgefragt wird und dann die
Grösse des Fensters programmseitig gesetzt wird.

Geht das (und wie) oder ist das zuviel verlangt?


Vielen Dank
Rainer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: minimalist
Datum: 27.07.18 11:43

Hier ist ein gutes tutorial das die form immer der screen anpasst. Es gibt nebenbei noch viele andere.
https://www.dreamincode.net/forums/topic/34776-resize-form-controls-for-screen-size-vb6/

Viel Spaß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: crosstravel
Datum: 27.07.18 13:19

Hallo,

danke für den Link. Ich habe mir den Code angeschaut und werde gegen Abend die ersten tests
machen. Eine Frage dazu habe ich. Gemäss der Beschreibung muss im Form_Load Event die folgende
zeile eingebaut werden:

lblInstructions.Font = SetFontSize8)
Mir ist nicht klar, um was es sich bei "lblInstructions2 handelt. Kannst Du es vielleicht kurz erklären?

Danke
Rainer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: minimalist
Datum: 27.07.18 13:30

O.K dieses Tutorial zeigt nicht nur wie die Formgröße geändert wird sondern auch controls in der Form und die Fonts. So lblInstructions.FontSize = SetFontSize() hier wird eine Funktion aufgerufen die die font der Größe der controls anpasst.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: minimalist
Datum: 27.07.18 14:11

Sorry, ich hab selbst mal dieses code benutzt und es muss zuviel geändert werden um es für dich zu gebrauchen. Es gibt wahrscheinlich einfachere Lösungen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: Zardoz
Datum: 27.07.18 16:15

Hallo Rainer,
sieh' dir mal das an:

https://www.vbarchiv.net/forum/read.php?f=3&t=20728&i=20743

https://www.vbarchiv.net/forum/id3_i20670t20608_skalieren-eines-forms-mit-inhalt.html

http://www.activevb.de/tipps/vb6tipps/tipp0486.html

https://www.vbarchiv.net/workshop/details.php?id=51

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: crosstravel
Datum: 28.07.18 12:20

Hallo Zardoz,

danke für die Informationen. Ich werde diese anschauen und versuchen, eine
passende Variant zu testen. Minimalist hat mir auch einen Link geschickt. Den
habe ich versucht zu testen - stürzt aber immer im zentralen Modul ab.

Hast Du vielleicht bereits eines der geschickten Beispiele im praktischen Einsatz?


Danke und herzlichen Gruss
Rainer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: crosstravel
Datum: 28.07.18 19:29

Hallo Zardoz,

ich habe bei activevb eine gangbare Lösung gefunden (siehe untenstehender Link). Diese wurde von Herfried K. Wagner entwickelt. Ich habe sie momentan im Test. Sie funktioniert ganz gut - nur mit TabStrips kommt sie nicht zurecht.



https://activevb.de/tutorials/tut_resindep/resindep.html



Gruss
Rainer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: Franki
Datum: 03.08.18 03:03

Hallo Rainer,

deine Frage ist nicht ganz eindeutig, denn du schreibst nicht, ob du nur mehr Platz brauchst oder auch die Inhalte der Steuerelemente in z.B. Schriftgröße verändern möchtest.

Der Wechsel von einem kleinen zu einem größeren Monitor hat nicht zwangsweise zur Folge, dass sich die Auflösung auch ändert. Meistens ist nur mehr Platz zur Verfügung den man durch die eigene Anwendung auch ausnutzen möchte.

Es reicht meistens die Abmessungen der jenigen Stuerelemente zu verändern die Daten optisch dar stellen (Grid z.B) oder in denen der User Eingaben machen kann. (Textfelder, besonders mehrzeilige)

Es bringt nichts eine OK Schaltfläche zu vergrößern wo der User eh nur drauf klicken kann wenn der Monitor größere Abmessungen hat.

Ich arbeite in solchen Fällen immer mit Form_Resize, dieses Event wird immer ausgelöst wenn sich die Größe ändert. So hat man einerseits die Unabhängigkeit von den Gegebenheiten wie der User die Anwendung sehen möchte (Nicht jeder will die im Vollbild sehen) und andererseits hat der User die Möglichkeit auch auf einem großen Monitor genau die Größe des Fensters einstellen zu können wie er sie grade braucht.

je größer der Monitor (oder sogar Multimonitorbetrieb) bringen die Flexibilität für den User und die wird auch genutzt.

Als besonderes Feature merke ich mir in meinen Anwendungen wie der User das eingestellt hat, speichere es ab und beim nächsten Start wird das abgefragt. So hat der User die Freiheit es selbst zu entscheiden und ich biete ihm den Komfort, dass er es entscheiden kann.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: crosstravel
Datum: 03.08.18 06:18

Hallo Frank,

das Problem bei den Kunden ist ganz einfach zu erklären. Die Forms wurden auf einem Monitor mit Auflösung 1920 x 1200 entwickelt. Hier sieht alles ganz gut aus. Jetzt haben einige Anwender neue monitore mit einer weitaus höheren auflösung (andere installerte Programme verlangen das). Die Folge ist, dass meine Bilder shr klein dargestellt werden und das Arbeiten damit erschwert ist.

Ziel meiner Bemühungen ist es, die aktuelle Auflösung des jeweiligen Benutzermonitors zu erkennen und dem Benutzer die möglichkeit geben, die Masken unserer Applikation (Forms, Controls, Fonts) grösser darzustellen. Als Beispiel habe ich gemeint, dass die Grösse des Bildschirms zu einem bestimmten Prozent-satz (z.B. 80%) ausgenutzt wird.

ich schaue jetzt nochmal das resize-event des sevDataGrid an. Vielleicht kann ich hier was machen und eine universelle Funktion bauen.

Gruss
Rainer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: Franki
Datum: 05.08.18 02:30

Hallo Rainer,
man darf da zwei verschiedene Dinge nicht durcheinander bringen.

Größe deiner Form auf 80% des Bildschirms bringen wäre ja nichts anderes als dass der User deine Form mit der Maus so groß zieht wie er sie möchte. (Da würde das Form_resize greifen)

Hier mal ein schnelles Beispiel zusammen getippt OHNE Fehlerbehandlung:
Du brauchst ein Label, ein Textfeld darunter und zwei Buttons unter dem Textfeld nebeneinander.



Private Sub Form_Load()
    Me.Label1.AutoSize = True
    Me.Label1.WordWrap = True
    Me.Label1.Left = 240
 
    Me.Text1.Text = "Hier steht was geschrieben"
    Me.Text1.Left = Me.Label1.Left
    Me.Command1.Left = Me.Label1.Left
 
End Sub
 
Private Sub Form_Resize()
     If Me.WindowState <> vbMinimized Then
        ' Bei minimiertem Fenster machen Groessenaenderungen keinen Sinn
 
        'Bildschirmauflösung ermitteln
        ' x und y Auflösung
        xRes = Screen.Width / Screen.TwipsPerPixelX
        yRes = Screen.Height / Screen.TwipsPerPixelY
 
        ' Rand ermitteln wegen verschiedener Windows Stile (Z.B. Aero)
        FensterrandRL = Me.Width - Me.ScaleWidth
 
        ' Mindestbreite
        If Me.Width < 8088 Then
            Me.Width = 8088
            Exit Sub
        End If
 
        ' Mindesthöhe
        If Me.Height < 5650 Then
            Me.Height = 5650
            Exit Sub
        End If
 
        Me.Label1.Caption = "Willkommen zur Demo, Ihre Bildschirmauflösung" & _
          "beträgt: " & "X:" & xRes & " Y:" & yRes & vbCrLf & vbCrLf & _
          "Fenstergroesse: " & "(" & Me.Width & " x " & Me.Height & " Twips)"
 
        FeldanpassungGroesse
 
     End If
End Sub
 
Private Sub Command1_Click()
    Me.Label1.FontSize = Me.Label1.FontSize + 3
    Me.Text1.FontSize = Me.Label1.FontSize
    FeldanpassungGroesse
End Sub
 
Private Sub Command2_Click()
 
    Me.Label1.FontSize = Me.Label1.FontSize - 3
    Me.Text1.FontSize = Me.Label1.FontSize
    FeldanpassungGroesse
End Sub
 
Private Sub FeldanpassungGroesse()
    rand = Me.Label1.Left
 
    ' von oben nach unten agieren
    Me.Label1.Width = Me.ScaleWidth - rand - rand
 
    Me.Text1.Height = 0
    Me.Text1.Top = Me.Label1.Top + Me.Label1.Height + rand
    Me.Text1.Width = Me.Label1.Width
 
    Me.Command1.Top = Me.Text1.Top + Me.Text1.Height + rand
    Me.Command2.Top = Me.Command1.Top
 
    Me.Command1.Height = Me.Text1.Height
    Me.Command2.Height = Me.Command1.Height
    Me.Command1.FontSize = Me.Label1.FontSize
    Me.Command2.FontSize = Me.Label1.FontSize
 
    Me.Command1.Width = Me.Text1.Width / 2 - rand
    Me.Command2.Width = Me.Command1.Width
 
    Me.Command2.Left = Me.Command1.Left + Me.Command1.Width + rand + rand
End Sub
Da siehst du oben im Label einerseits die Auflösung des Monitors, die bleibt immer gleich, aber wenn du mit der Maus das Fenster in der Größe änderst ändern sich die Werte (in Twips) auf diese musst du reagieren wenn du die 80% erreichen möchtest.

Was die (hier) Schriftgrößen angeht, probiere die beiden Schaltflächen mal aus, du siehst was passiert. (Aber bitte nicht zu oft, es ist keine Fehlerbehandlung eingebaut)

Das Resize Ereignis gibt es nur für die Form selbst und nicht für ein Steuerelement direkt.
Beim SevGrid funktioniert aber die Zuweisung von .FontSize, Die Abmessungen kannst du wie oben berechnen, aber die Spaltenbreiten z.B. muss der User selbst anpassen. Ich mache das so, dass beim Beenden des Formulars die Werte gespeichert werden und beim nächsten Aufruf wieder zugewiesen werden.

Man sollte dem User so viel Individualität wie möglich gestatten die Anwendung so konfigurieren zu können wie er es braucht bzw. möchte. Stichwort Barrierefreiheit im optischen Sinn. Denn nicht nur die Abmessung des Monitors /Fenster im Vollbild, die Auflösung sondern auch die individuellen Einstellungen in Windows sind wichtig. Nicht jeder hat in Windows die Standardschriftgröße eingestellt, ich als Brillenträger z.B. habe die etwas größer (125%) eingestellt. Und das wird bei meinem obigen Code automatisch berücksichtigt, geht aber krachen wenn du feste Werte vor gibst...

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: crosstravel
Datum: 05.08.18 09:19

Hallo Frank,

denke für das Beispiel; Du hast Dir viel Mühe gemacht. Ich habe es jetzt getestet und es sieht
ganz gut aus. Der Hinweis mit dem Speichern der Werte beim Beenden des Programmes ist sehr gut.

Ich sehe noch nicht, wie ich hier eine "Standardfunktion" machen kann. Ich habe in meiner Applikation
mehrere Forms mit einer grossen Anzahl Labels, Textfeldern, Controls. Meiner Meinung nach sollte ich
alle diese Komponenten zu Beginn der Verarbeitung "sammeln" und die Grössenanpassung sollte dann für
alle erfolgen.

Ich sehe noch nicht, wie ich das hinbekomme.


Schönen Sonntag und vielen Dank
Rainer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: Franki
Datum: 06.08.18 01:52

Hallo Rainer,

du brauchst ja nur die Informationen zu speichern (und wieder einzulesen) die der User selbst festlegen kann bzw. soll. Z.B. Sczhriftgröße, Schriftart oder was auch immer.

Da reicht die reine Zuweisung und ein Label z.B. passt sich ja dann automatisch an.
Das _resize Ereignis wird ja immer ausgelöst die daraus resultierenden Werte brauchst du nicht zu speichern.

Die ganzen Angaben in der die Controls im Verhältnis zueinander stehen ergeben sich automtisch.

Beispiel:
Textfeld 1, darunter Textfeld2:

Me.Text2.Top = Me.Text1.Top + Me.Text1.Height + Abstand
Da brauchst du nichts extra zu speichern, das passt immer.

Die relativen Angaben kannst du auch einfach so verwenden, z.B. ein Textfeld in der maximal verfügbaren Breite anzeigen.

Du musst nur auf Extremfälle achten die du unterbinden musst wenn sie durch Usereinstellungen den maximalten Platz übersteigen würden oder die Minimalgröße unterschreiten würden wenn der User das Fenster zu klein macht. Aber das findest du bei deinen Tests schnell selbt heraus was da für Grenzen gegeben sind.

Du hast ja mehrere Forms, was ja üblich ist. Jede davon hat ihr eigenes _Resize Ereignis, bei globalen Einstellungen liest du halt aus einer externen Datei die Werte beim _Load des Formulars aus.

Ich weiß, das Thema ist nicht ganz einfach wenn man sich noch nie damit beschäftig hat. Aber es lohnt sich. Ich persönlich empfinde es als positiv, dass ich schon unter Win95 damit gearbeitet habe und weiß es umso mehr zu schätzen weil es jetzt auch diverse mobile Geräte gibt die man nicht in Kategorien pressen kann. In der Webentwicklung gehe ich auch den "mobile first" Weg und baue dann nach oben auf. Also man hat nie die Garantie was der User so hat bzw. was er auf seinem jeweiligen Device so eingestellt hat. Es ist zwar am Anfang etwas Umdenken erforderlich, aber wenn man das mal kapiert hat wie das funktioniert will man den "Mehraufwand" nicht mehr missen.

Gruß und viel Erfolg,

Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: crosstravel
Datum: 06.08.18 10:40

Hallo Frank,

da muss ich wohl noch einen langen Weg gehen .... mir graut vor den "komplexen" Bildern mit vielen
unterschiedlichen Textboxen, Buttons, TabStrips usw. - aber ich will es versuchen -


Liebe Grüsse und vielen Dank
Rainer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: Franki
Datum: 08.08.18 02:21

Hallo Rainer,

vielleicht ist das ja gar nicht so komplex wie es auf den ersten Blick aus sieht.
Denn grade viele Labels und Textboxen sind ja irgenwie damals angeordnet worden wie sie jetzt sind.

Und da waren bestimmt auch Designelemente wichtig, also wie groß wie breit, wie viele Informationen müssen rein usw.

Analysiere doch mal das alte Design der Formulare mit den festen Werten und rechne es prozentual um. Dann hast du wahrscheinlich schon die halbe Arbeit gemacht.

Und wenn es sich um viele Stuerelemente gleicher Art handelt, kannst du diese evtl. auch über eine Schleife behandeln. Denn Steuerelementfelder mit Index waren unter VB6 ja noch üblich. Ich habe sie damals gerne genutzt und nutze sie bei den VB6 Anwendungen die noch laufen immer noch gerne.

Gruß und viel Erfolg,

Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: Tenconi
Datum: 25.09.18 19:58

Sie köennen über < Form Load > und < Form_Resize > wichtige
Programme Parameter zu Setzen und bei < Form_Resize > die Grösse und Position der
Object anzupassen.

Private Sub Form_Load()
Dim Dummy As Byte

Dummy = 1
' Hier werden Grund Parameter bei Programm Start Initialiesiert !
'-------------------------------------
HScroll_Text_Groesse.Value = 9 ' Hier Scroll Kursor Grundeinstellung
Text_Editor.Font.Size = 16 ' Text_Editor Schrift Grösse
Text_Groesse.Text = 16 '
'-------------------------------------
End Sub

Private Sub Form_Resize()
Dim Dummy As Byte
Dim Form1_Breite As Long
Dim Form1_Hoehe As Long
'-----------------------------------------------------------------------------------------
' << Begin >>
'
Dummy = 1 ' Dummy kann Nützliche Sein um ein Breachpoint
' zu setzen !
'-----------------------------------------------------------------------------------------
Form1_Breite = Form1.Width ' Window Grösse ( Haupt Fenster ) lesen nach
' Form1_Breite
'----------------------------------------------------------------------------------------
Form1_Hoehe = Form1.Height ' Window Grösse ( Haupt Fenster ) lesen nach

'-----------------------------------------------------------------------------------------
Text_Editor.Width = Form1_Breite - 600 ' Anpassung der Textbox Breite zu Gesamt
' Window_Form grösse änderung
'-----------------------------------------------------------------------------------------
Text_Editor.Height = Form1_Hoehe - 2300 ' Anpassung der Textbox Hoehe zu Gesamt
' Window_Form grösse änderung
'-----------------------------------------------------------------------------------------
' << Ende >>
End Sub

Ich hoffe damit dass ich weiter helfen könnte!
Wenn es der überblick dienen wurde konnte ich en Kleine VB6 Project
zu verfügung stellen. ( schreiben Sie mir wie es geht... ich bin neu hier )
 
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: crosstravel
Datum: 26.09.18 07:22

Hallo Tenconi,

danke für das Feedback. Meine Erfahrung zeigt, dass die Grössenanpassung nicht so trivial ist, wie es auf den ersten Blick aussieht. Es geht ja nicht darum, lediglich die Form einem Resize zu unterziehen; vielmehr müssen alle controls darauf entsprechend in der Grösse und der Position angepasst werden. Hier bin ich schon einen Schritt weiter; allerdings mit TabStrips klappt es bis heute nicht.

einen schönen Tag
Rainer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fenster automatisch in der Grösse anpassen 
Autor: Tenconi
Datum: 26.09.18 21:51

Hallo Rainer,

gerade habe ich ein kleine Demo Programm geschrieben

Name : Proj : Windows_Parameter_Zeigen.vbp
Windows_Parameter_Zeigen.exe

das ganz Gebete habe ich im meine Google Drive als Window_XY_Breit_Hohe_Werten.rar

dieser ist unter ein frei gegeben Ordner vorhanden.

der Link ist : https://drive.google.com/drive/folders/1C5m6REixX39Zlr60b3lBWtjVH7yFnp-a?usp=sharing

darin sind auch unter andere ein Programmierbar Rechner mit Parcer gleichung formulierung
auch komplete VB6 Project vorhanden.

Schau Dir dieser Lange VB6 gebete, VB6 starten und Laufen lassen step bei Step
es mache somit vile Erkärung Bla Bla unberflüssig und dann schreibe mir,
wie Du damit zurecht kommt.

Grüesse

Bernard


<< meine Sofware Programme sind frei. >>
Wichtig ist, das es von andere NICHT als selbst Entwickeln angegeben wird.
das hat mit Fairnise zu tun.

Bis dann...

Auf Dein nachricht ( euere wenn mehrere von euch lesen ) nachricht freue ich mich
im voraus um erfahrung auszutauschen!


( Sorry meine Deutsche ist nicht zu gut da ich Franzose bin ... )
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel