Autor
|
Thema: Dialogposition speichern (1148 mal gelesen)
|
Dilpschi Mitglied Ing. Verfahrenstechnik
![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für Dilpschi](/foren/ubb/pmimages/gbu.gif) Beiträge: 18 Registriert: 29.04.2013
|
erstellt am: 24. Jul. 2015 19:40 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif)
Hallo Allerseits, ich habe ein kleines VBA Tool in Inventor für eine einfache Positionierung und Parameteränderung von Bauteilen geschrieben. Das ganze wird nach Selektion des Bauteiles gestartet. Nach Fertigstellung wird es geschlossen und danach wieder mit einem anderen selektierten Bauteil gestartet. Das Userform hat eine feste Position - und generell die falsche ;-)) - es steht immer im Weg. Kann man daher per Macro die voreingestellten .LEFT und .TOP Vorgaben des Userforms ändern? Diese werden bei neustart des Dialogs ja immer wieder zurückgesetzt. Auch eine Zwischenpeicherung in 2 verdeckte Labels bringt nix, weil diese auch nicht gespeichert werden und nach Neustart des Dialogs wieder den voreingestellten Wert haben. Schön wäre es, wenn man das Userform an eine bestimmte Stelle zieht und dann per commandbutton die neue Position generell festlegt. VG Tom ------------------ Einfach mal rechts fahren.... [Diese Nachricht wurde von Dilpschi am 24. Jul. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
![](/foren/avatars/KlaK.gif)
![Schreiben Sie einen Gästebucheintrag für KlaK](/foren/ubb/pmimages/gbu.gif) Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2014 Plateia, Canalis Visual Basic
|
erstellt am: 24. Jul. 2015 23:56 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif) Nur für Dilpschi
Da fallen mir spontan mehrere Möglichkeiten ein: - Speichern in einer Datei (gleiches Verzeichnis wie Zeichnung) - Hinterlegen in der Registry - Erzeugen eines Xdata Eintrags mit Namen Deiner Anwendung Beim Laden wäre dann zu prüfen ob die entsprechende Variante vorhanden ist Sind zwar einfache Beispiele, bestimmt gibt es noch bessere, aber einfach zu proggen Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
![](/foren/avatars/KMassler.gif)
![Schreiben Sie einen Gästebucheintrag für KMassler](/foren/ubb/pmimages/gbu.gif) Beiträge: 2657 Registriert: 06.11.2000
|
erstellt am: 27. Jul. 2015 08:32 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif) Nur für Dilpschi
Du kannst die Werte auslesen im code der Form, als Me.Left, Me.Top, Me.Width und Me.Height und dann irgendwo /irgendwie (s.o.) zwischenspeichern. Das Speichern solltes du in der "Sub UserForm_QueryClose" erledigen, die wird beim Schließen der Form durchlaufen. Beim nächsten Start in der "Sub UserForm_Initialize()" dann wieder laden und den Werten zuweisen. Darauf achten: Die Positionszuweisung funktioniert nur, wenn du in den Eigenschaften der Form den Wert für "StartUpPosition" auf "0 - Manuell" gesetzt hast. Die "Sub UserForm_Initialize()" wir nur beim Erzeugen der Form aufgerufen, wenn du diese Form also nur versteckst und dann wieder anzeigst, wird das nur 1x durchlaufen. Dann solltest du das möglicherweise in die "Sub UserForm_Activate()" verlegen. [Edit]Der Absatz macht keinen Sinn, beim Verstecken/Ausblenden einer Form ändern sich ja deren Position oder Größe nicht^^ [/Edit]
------------------ Klaus www.al-ko.com | mein Gästebuch [Diese Nachricht wurde von KMassler am 27. Jul. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dilpschi Mitglied Ing. Verfahrenstechnik
![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für Dilpschi](/foren/ubb/pmimages/gbu.gif) Beiträge: 18 Registriert: 29.04.2013 Factory Design Suite 2015, Win 7 64, I7 4820K/32GB RAM/Nvidia K4200
|
erstellt am: 28. Jul. 2015 19:59 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif)
Hallo Klaus, das habe ich schon probiert, aber mit dem Schließen des Dialogs werden auchg die Werte wieder zurückgesetzt. Ich habe 2 labels "versteckt", denen ich die 2 Werte zuweise (in QueryClose), aber da ist das Formular ja noch präsent. Beim Neustart werden auch diese beiden Werte wieder zurückgesetzt. Ich kann die Vorgabeform in dem Sinne nicht ändern. Ich hatte eigentlich irgendetwas im Objekt ThisApplication oder Document gesucht, wo das Formular verankert ist und ich direkt drauf zugreifen kann. Im Objektpfad: ThisApplication.VBAProjects(1).InventorVBAComponents(2) (mein Beispiel) komme ich ja an das Userform ran. Ich finde nur nicht die Deklarationen zum Userform, wie Top, Left etc., welche ich auch von außen durch ein Makro ändern könnte. VG Tom
------------------ Einfach mal rechts fahren.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
![](/foren/avatars/KMassler.gif)
![Schreiben Sie einen Gästebucheintrag für KMassler](/foren/ubb/pmimages/gbu.gif) Beiträge: 2657 Registriert: 06.11.2000
|
erstellt am: 29. Jul. 2015 08:48 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif) Nur für Dilpschi
Der Code der Form: Code: Const Configfilename = "democonfig.txt"Private Sub CommandButton1_Click() Unload Me End Sub Private Sub UserForm_Initialize() Dim filename As String Me.StartUpPosition = 0 'manuelle Position 'Form wird initialisiert, dazu werden die Startposition und Größe aus Datei gelesen 'Existiert die Datei? filename = Dir(Environ("APPDATA") & "\" & Configfilename) If filename <> "" Then Open Environ("APPDATA") & "\" & filename For Input As #2 Line Input #2, l Line Input #2, t Line Input #2, w Line Input #2, h Close #2 Me.Left = CDbl(Replace(l, ".", ",")) Me.Top = CDbl(Replace(t, ".", ",")) Me.Width = CDbl(Replace(w, ".", ",")) Me.Height = CDbl(Replace(h, ".", ",")) End If End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'Form wird geschlossen, Position und Größe speichern: On Error Resume Next Open Environ("APPDATA") & "\" & Configfilename For Output As #1 Write #1, Me.Left Write #1, Me.Top Write #1, Me.Width Write #1, Me.Height Close #1 End Sub
Die Form enthält noch einen Button CommandButton1 zum Schließen. Ich speichere Position und Größe in der Datei %appdata%\democonfig.txt. Das passiert beim Schließen des Fensters in der Sub UserForm_QueryClose. Beim Initialisieren (1. Öffnen der Form) wird diese Datei wieder ausgelesen, dabei musst du darauf achten, dass die Koordinaten als Double gespeichert wurden, mit . als Trennzeichen. Um die wieder zu verwenden, musst du den Punkt erst durch , ersetzen. Das passiert hier bei der Zuweisung zu Me.Left usw. Alternativ (und international sicherer) könntest du die Werte vor dem Speichern erst runden (auf ein halbes Pixel kommt es nicht an), dann gibts keine Probleme mit dem Dezimalzeichen. [Edit]die Zeilen mit me.width und me.height kannst du wohl weglassen, die Fenstergröße lässt sich eh nicht ziehen.[/Edit] ------------------ Klaus www.al-ko.com | mein Gästebuch [Diese Nachricht wurde von KMassler am 29. Jul. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
![](https://ww4.cad.de/books/view.php?what=zone:11101&n=s11101BB) |