vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 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
Resize-Ereignis mit Frame 
Autor: Sophus
Datum: 15.09.13 21:47

Hallo Leute,

bestimmt denke ich an dieser Stelle etwas kompliziert und bestimmt lächeln hier einige.
Nun, folgender Sachverhalt. Wie ich ListView oder Frame an sich im Resize-Ereignis dazu bringe, dass sie sich immer an die Größe der Form anpassen, habe ich verstanden. Nun aber habe ich nicht nur das Steuerelement Frame auf meine Form platziert, sondern ich benutze das Frame als eine Art Container. Das heißt, ich habe einige Steuerelemente direkt aus der Werkzeugkiste - zum Beispiel Label, Textboxen und Command-Button - in den Frame hinzugefügt, und zwar auf den Plätzen, wo sie zur Laufzeit auch bleiben sollen. Beim Resize-Ereignis bewegt sich das Steuerelement Frame und mein Listview entsprechend der Form mit, aber alle anderen Steuerelemente im Frame bleiben reglos. Im Internet fand ich einige Code-Beispiel, in welcher man zum Beispiel mit Klassen oder umfangreichen Modulen arbeitet. Ist es wirklich so umständlich?

Danke.
Sophus

Beitrag wurde zuletzt am 15.09.13 um 21:53:19 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Zardoz
Datum: 15.09.13 22:12

Hallo Sophus,
was willst du denn erreichen, dass sich die Steuerelemente mit
dem Frame mitbewegen, oder das sich die Controls der Grösse
des Frames anpassen?

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Sophus
Datum: 15.09.13 22:28

Hallo Zardoz,

die Form habe ich in der IDE auf "Änderbar" eingestellt. Der Anwender kann also zur Laufzeit die Formgröße beliebig ändern. Ohne das Resize-Ereignis würden die Steuerlemente einfach auf ihren Plätzen "sitzen bleiben", während der Anwender die Formgröße ändert. Aus diesem Grund sollen sich alle Steuerelemente der Form mitbewegen. ListView1 und das Steuerelement Frame1 bewegt sich ja auch mit, nur nicht die Steuerelemente, die ich in den Frame1 reingepackt habe, und zwar Label, TextBoxen und Command-Button.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Zardoz
Datum: 15.09.13 23:00

Hallo Sophus,
wenn die Controls das Frame-Control als Container haben, bewegen sie
sich auch mit. Bewegen sich die Controls mit, wenn du zur [u]Entwurfszeit
das Frame-Control bewegst? Wenn nicht, befinden sie sich auf der
Form. Du kannst Controls zur Laufzeit auf einen Container setzen mit
Set Label1.Container = Frame1
Label1.Move Xpos, Ypos
Oder zur Entwurfszeit, indem du sie auf den Container zeichnest.
Du kannst auch zur Entwurfszeit ein Control ausschneiden, Container
anklicken und einfügen.

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Sophus
Datum: 15.09.13 23:28

Hallo Zardoz,

so einfach geht es leider nicht. Ich habe zur Entwurfszeit (IDE) zum Beispiel das Steuerelement Label1 auf das das Steuerelement Frame1 gezeichnet. Dies lässt sich ja ganz einfach überprüfen, in dem ich das Steuerelement Label1 zur Entwurfzeit hin und her ziehe, am besten über die Breite und Höhe des Frame1 hinaus. An dieser Stelle sieht man ja dann, wie das Steuerelement "abgeschnitten" dargestellt wird. Und die im Frame1 befindlichen Steuerelemente bewegen sich nicht mit.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Manfred X
Datum: 15.09.13 23:52

Doch, das geht gaaanz einfach.

Per Designer:

Frame auf die Form ziehen.
Frame anklicken und dadurch aktivieren
Steuerelement (z.B. Command) auf das Frame ziehen.

Beim Resize-Event muß eventuell die Position der Steuerelemente
innerhalb des Frame angepaßt werden.

Private Sub Form_Resize()
 
   Frame1.Width = Me.Width - Frame1.Left - 200
   Command1.Left = Frame1.Width - Command1.Width - 100
 
End Sub


Beitrag wurde zuletzt am 15.09.13 um 23:54:49 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Zardoz
Datum: 15.09.13 23:56

Hallo Sophus,
probier' mal dies:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
Private Sub Form_Activate()
 
  Dim i&, C1 As Control, C2 As Control, C3 As Control
 
  Me.ScaleMode = vbPixels
  Me.WindowState = vbMaximized
 
  Set C2 = Me.Controls.Add("VB.Frame", "Frm1")
  C2.Caption = "Frame"
  C2.BackColor = vbGreen
  C2.Move 10, 10, 300, 200
  C2.Visible = True
 
  Set C1 = Me.Controls.Add("VB.Label", "Lbl1")
  Set C1.Container = C2
  C1.Move 20 * 15, 20 * 15
  C1.Visible = True
  C1.BackColor = vbBlue
 
  Set C3 = Me.Controls.Add("VB.CommandButton", "Btt1")
  Set C3.Container = C2
  C3.Move 20 * 15, 70 * 15
  C3.Caption = "Commandbutton"
  C3.Visible = True
 
  For i = Me.ScaleWidth To 0 Step -1
    C2.Left = i
    DoEvents
    Call Sleep(12)
  Next i
 
End Sub
Bewegen sich die Controls mit dem Frame?

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Sophus
Datum: 16.09.13 00:24

Ich glaube, wir bewegen uns im Kreis, ich habe für euch ein Screenshot hochgeladen, damit ihr erstmal seht, wie ich es mir in Etwa vorstelle.



Mein bisheriger Code sieht folgendermaßen aus:

Private Sub Form_Resize()
On Error Resume Next
ListView1.Height = Me.ScaleHeight - (ListView1.Top * 1) - StatusBar1.Height
ListView1.Width = Me.ScaleWidth - (ListView1.Left * 2)
Frame1.Height = Me.ScaleHeight - (Frame1.Top * 1) - ListView1.Height - _
  StatusBar1.Height 
Frame1.Width = Me.ScaleWidth - (Frame1.Left * 2)
End Sub
Bis hier ist ja auch alles in Ordnung, aber die Labels, Textboxen und der eine Command-Button, die wurden zur Entwurfzeit so platziert, wie sie auch zur Laufzeit angezeigt werden soll. Beim Verändern der Formgröße sollen sich diese Steuerelemente in Frame1 gleichzeitig (quasi parallel) mit bewegen. In meinem Screenshot sehen wir, dass meine Form1 nach rechts vergrößert wurde, und dass ListView1 und Frame1 sich der Form mitbewegt. Aber die Steuerelemente im Frame1 bleiben "einfach auf ihren Plätzen sitzen". Der Command-Button müsste quasi weit rechts sein. Text3 soll nahe am Command-Button bleiben, Text2 eher mittig, und Text1 weit links - tut es aber nicht. Und das ganze auch anders rum, wenn die Form1 von rechts nach links wieder verkleinert wird, dann sollen die Steuerelemente auf ihren Plätzen bleiben, aber beim Verkleinern der Form1 mitgehen.

Beitrag wurde zuletzt am 16.09.13 um 00:41:35 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Rippler
Datum: 16.09.13 01:21


Private Sub Form_Resize()
   Frame1.Width = Me.ScaleWidth - Frame1.Left * 2
   Label2.Left = (Frame1.Width - Text2.Width - Command1.Width) / 2 - 90
   Text2.Left = Label2.Left
   Command1.Left = Frame1.Width - Command1.Width - 180
   Label3.Left = Command1.Left - Text3.Width - 180
   Text3.Left = Label3.Left
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Zardoz
Datum: 16.09.13 01:22

Hallo Sophus,
dafür gibt es keine Einstellungen. Das muss man
selbst programmieren. Hier mal ein Ansatz:
Private Breite!
 
Private Sub Form_Load()
 
  Dim C As Control
 
  Breite = Frame1.Width
  For Each C In Me.Controls
    If C.Container Is Frame1 Then C.Tag = CStr(C.Left)
  Next C
 
End Sub
 
Private Sub Form_Resize()
 
  Dim C As Control
 
  ' ...
  Frame1.Width = Me.ScaleWidth - (Frame1.Left * 2)
 
  For Each C In Me.Controls
    If C.Container Is Frame1 Then C.Left = Frame1.Width / Breite * Val(C.Tag)
  Next C
 
End Sub

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Sophus
Datum: 16.09.13 01:26

Hey Rippler,

zunächst gilt auch die ein Dankeschön. Ich habe dein Code-Beispiel noch nicht angewendet, aber ich habe vorab eine Frage. Was hat es mit den Zahlen 90 und 180 auf sich? Ich weiß nicht, wie man auf diese Zahlen kommt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Sophus
Datum: 16.09.13 01:44

Hey Zardoz,

auch dir möchte ich danken, aber ich empfinde deinen Code einfach zu anspruchsvoll. Ich bin nur ein blutiger Anfänger, und habe deinen Code leider bis zur Hälfte verstanden. Dein Code sieht auch ziemlich kompliziert aus. Erfüllt dein Code-Beispiel den gleichen Zweck wie der von Rippler oder hast du einige Besonderheiten mit eingebaut?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Franki
Datum: 16.09.13 01:46

Hallo Sophus,

Bewegen tut sich bei deinem Code gar nichts, die linke obere Ecke von Frame und ListView bleiben wo sie sind, es wird nur vergrößert.

Wenn du Steuerelemente verschieben möchtest mußt du das per Code machen. Beispiel für den Command Button.

Private Sub Form_Resize()
    Frame1.Width = Me.ScaleWidth - (Frame1.Left * 2)
    Command1.Left = Frame1.Width - Command1.Width - 200
End Sub
Dadurch wird der Command Button nur neu positioniert und nicht in der Größe verändert. Er verschiebt sich aber immer mit einem Abstand von 200 Twip an den rechten Rand des Frames.

Und so musst du auch mit den Textboxen verfahren, also zur Verfügung stehenden Platz ermitteln, die Abstände berücksichtigen (z.B. 200) und dann aufteilen.

Noch zwei Bemerkungen:

Das On Error Resume next hat da nichts verloren, warum hast du das da drin?
Damit das Fenster minimiert werden kann? Das kann man drum herum mit Abfrage auf WindowState <> VbMinimized erledigen. Weiterhin solltest du eine Mindestgröße für die Form festlegen, damit auch alle Steuerelemente noch eine Vernünftige Breite haben.

Wenn sich die Position eines Steuerelementes nicht ändert brauchst du für nachfolgende Positionierungen auch nichts zu erledigen wenn das davon abhängig ist.
In deinem Code
Frame1.Height = Me.ScaleHeight - (Frame1.Top * 1) - ListView1.Height - _
  StatusBar1.Height
ist dieser Teil völlig überflüssig weil sich die Top Position des ListView ja nicht ändert. Das ListView bleibt links/oben wo es ist also bleibt auch das darüberliegende Frame in der Höhe immer gleich.

Gruß
Frank




Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Manfred X
Datum: 16.09.13 09:14

Hallo Sophus!

Der Nickname ist seit 8 Jahren hier registriert.
In den letzten Jahren sind ca. 24 Anfragen im Forum gestellt worden.
Aber: Nach wie vor fehlen die Grundkenntnisse.
Die Hinweise in den Antworten werden deshalb nicht verstanden.

Woher kommen die Zahlen im Beispielcode?

Das sind Distanzen auf dem Formular (= Angabe der Größe von Controls
bzw. Abstände zwischen den zu positionierenden Elementen).
Die in VB6 dafür vorgegebene Maßeinheit ist das "Twip".

[I]Eine bildschirmunabhängige Einheit, die verwendet wird, um dieselbe
Positionierung und dieselben Proportionen von Bildschirmelementen in Ihrer
Anwendung auf allen Anzeigesystemen sicherzustellen.

Ein Twip ist eine Bildschirm-Maßeinheit, die 1/20 eines auf einem Drucker
ausgegebenen Punktes entspricht. Ein logischer Zentimeter enthält ca. 567 Twips,
und ein logischer Zoll enthält ca. 1440 Twips
(bzw. die Länge eines Bildschirmelements, das einen Zentimeter oder einen Zoll
groß ist, wenn es auf dem Drucker ausgegeben wird).[/I](VB6-Doku).






Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Resize-Ereignis mit Frame 
Autor: Sophus
Datum: 16.09.13 14:53

Hey Mafred X,

vielen Dank. Ja, ich merke selbst, dass ich sehr große Lücken besitze.
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