Private Objektmodule dürfen in öffentlichen...

Ehrlich gesagt, verstehe ich immer noch nicht, warum Du Deine Prozedur nicht in ein MODUL packst. Da gibt es keine Probleme, und Du musst sie nicht in jede Form tun, was dem Programm nun wirklich nicht gut tut.

Zu Deiner zweiten Frage lies mal diesen Tipp. Der hilft Dir weiter.

Grüsse
ronaldh
 
Hey das hat mit leichteren Anpassungen toll funktioniert, ich danke.
Noch eine kleinere Frage.
Ich würde gerne die Grösse und Position des Fensters in die Registry speichern und diese dann beim nächsten Startup wieder auslesen.
Das Problem ist, wenn der Benutzer nur die Position ändert, zündet weder der Resize noch sonst irgend ein Event, den ich ausprobiert habe.
Das einzige, was mir einfällt, ist etwas mit den Mouseclickevents zu basteln, aber da gibts doch sicher eine elegantere Lösung?
 
Freut mich, wenn ich Dir helfen konnte.

Ein Form_Move Ereignis gibt es wirklich nicht. Und wenn man in die Titelleiste einer Form klickt, um diese zu bewegen, wird weder MouseDown, MouseUp noch sonst irgendetwas ausgelöst.

Das Speichern der Formposition und Größe würde ich an Deiner Stelle im Form_Unload-Ereignis machen. Das ist auch wesentlich besser, weil dieser Vorgang dann nur einmal ausgeführt wird, und nicht bei jeder Größenänderung.

Viele Grüsse
ronaldh
 
Ah hat man mir auch empfohlen. Kann ich leider net machen, da das Form nur ein Modul zu einem Programm ist. Wenn also das Hauptprogramm geschlossen wird, löst sich der Event nicht aus und es wird gar nichts gespeichert.
 
Wieso? Ich habe in eine Form folgendes geschrieben:

Visual Basic:
Private Sub Form_Unload(Cancel As Integer)
   Call WriteFormSettings(Me)
End Sub

Und in ein Modul folgendes:

Visual Basic:
Public Sub WriteFormSettings(frm As Form)
   Debug.Print frm.Top, frm.Left, frm.Height, frm.Width
End Sub

Statt dem Debug.Print kannst Du natürlich auch in die Registry schreiben. Aber irgendwo musst Du das ja programmieren. Da ist es doch Banane, wie das Programm aufgebaut ist.

ronaldh
 
neinein mit Modul meinte ich, dass mein Teil nur an ein anderes Programm angehängt ist und mein Formular aufruft. Wenn ich jetzt das Hauptprogramm schliesse, werden die unteren Formulare, also auch meins, automatisch und ohne Unload geschlossen.
 
ok, verstehe. Wenn der Prozess einfach gekillt wird, wird leider tatsächlich das Form_Unload Ereignis auch nicht mehr ausgelöst.

In dem Fall hast Du nur folgende Möglichkeiten:

Entweder Du verzichtest darauf, die Position zu speichern, wenn nur verschoben wurde.

Oder Du baust einen Timer ein, in dem Du regelmäßig die Position prüfst, und, falls sie sich geändert hat, speicherst. Zum Beispiel so:

Visual Basic:
Private Sub Timer1_Timer()
   Static Oben As Double
   Static Links As Double
   Static Hoehe As Double
   Static Breite As Double
   
   If Oben <> Me.Top Or Links <> Me.Left Or Hoehe <> Me.Height Or Breite <> Me.Width Then
      Oben = Me.Top
      Links = Me.Left
      Hoehe = Me.Height
      Breite = Me.Width
      Call WerteSpeichern
   End If
   
End Sub

Grüsse
ronaldh
 
hm danke erstmal, hätte echt gedacht, dass Forms verschieben noch etwas oft benutztes wäre, habe ich mich wohl geirrt.
Dumme Nebenfrage: Static habe ich noch gar nie gebraucht, was sind denn die Merkmale von diesem Typ?
 
Static bedeutet, dass die Werte nach Verlassen der Prozedur erhalten bleiben.

Würdest Du hier "Dim" verwenden, würde jedesmal die Speicherroutine aufgerufen werden, weil die Werte jedesmal auf 0 initialisiert werden.

Im übrigen wusste ich nicht, dass das Unload-Ereignis nicht aufgerufen wird, wenn man den Prozess von woanders abschießt. Habe ich ausprobiert, ist aber tatsächlich so. Ist auch eigentlich logisch, weil der Prozess davon ja überhaupt nichts mit bekommt.

Viele Grüsse
ronaldh
 

Neue Beiträge

Zurück