| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Größe des PaletteSet dynamisch ändern (1211 mal gelesen)
|
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 04. Dez. 2009 10:10 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen! Ich habe in meinem Projekt ein PaletteSet mit zwei Reitern. Diese sind unterschiedlich breit. Der erste Reiter etwas breiter, da hier viel Konfiguration vorgenommen wird, der zweite Reiter schmäler, über welchen das automatisierte Zeichnen angestoßen wird. Somit hat man während der Zeichenfunktionen mehr Platz für das AutoCAD Fenster und kann trotzdem das automatisierte Zeichnen steuern. Wenn ich mein PaletteSet nicht andocke, kann ich die Größe sehr schön anpassen: Code: Private Sub EventHandlerPaletteActivated(ByVal sender As Object, ByVal e As PaletteActivatedEventArgs) If myPaletteSet.Dock = DockSides.None Then If e.Activated.Name = "Reiter 1" Then myPaletteSet.Size = New Drawing.Size(320, myPaletteSet.Size.Height) ElseIf e.Activated.Name = "Reiter 2" Then myPaletteSet.Size = New Drawing.Size(220, myPaletteSet.Size.Height) End If End If End Sub
Aber wenn ich das PaletteSet andocke, bleibt immer ein Rand: Diesen kann ich dann nur von Hand weiter nach links schieben. Wie kann ich es erreichen, dass nicht nur das PaletteSet kleiner und größer wird, sondern auch der Rand mitverschoben wird?
Im Anhang ein kleines Testprojekt...(wie Screenshot). Danke für die Hilfe, Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 04. Dez. 2009 13:28 <-- editieren / zitieren -->
Hi Sebastian, leider, ich finde auf die schnelle mal nichts, womit das sauber gemacht werden kann. Ich werd aber, wenn mal mehr Zeit ist, noch stöbern gehen, aber mehr Zeit ist leider so schnell nicht in Aussicht. Darum hier die halb-kranke Variante, die vielleicht hilft: Wenn das AutoCAD-Fenster nicht maximiert ist (hab ich nicht probiert), dann kannst Du in Deinem Event-Handling für Paletten-Aktivierung einbauen: Code: Dim tSize As System.Drawing.Size = ApplicationServices.Application.MainWindow.Size ApplicationServices.Application.MainWindow.Size = New System.Drawing.Size(tSize.Width - 1, tSize.Height - 1)
Im Prinzip mach ich damit nichts anders, als das Hauptfenster von AutoCAD in der Größe zu ändern und damit AutoCAD indirekt zu überreden, das Update zu übernehmen. Hoffe es hilft trotzdem, - alfred - ------------------ www.hollaus.at |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 04. Dez. 2009 14:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, danke für die Mühe!! Dein "Trick" klappt bei nicht maximiertem Hauptfenster sehr gut. Für alle, die mal was ähnliches suchen, hier nun mein Code: Code:
Private Sub EventHandlerPaletteActivated(ByVal sender As Object, ByVal e As PaletteActivatedEventArgs) If myPaletteSet.Dock = DockSides.None Then If e.Activated.Name = strNameOfReiter1 Then myPaletteSet.Size = New Drawing.Size(552, myPaletteSet.Size.Height) ElseIf e.Activated.Name = strNameOfReiter2 Then myPaletteSet.Size = New Drawing.Size(332, myPaletteSet.Size.Height) End If ElseIf Application.MainWindow.WindowState = Window.State.Normal Then If e.Activated.Name = strNameOfReiter1 Then myPaletteSet.Size = New Drawing.Size(517, myPaletteSet.Size.Height) ElseIf e.Activated.Name = strNameOfReiter2 Then myPaletteSet.Size = New Drawing.Size(298, myPaletteSet.Size.Height) End If Application.MainWindow.Size = New Drawing.Size(Application.MainWindow.Size.Width - 1, Application.MainWindow.Size.Height - 1) Application.MainWindow.Size = New Drawing.Size(Application.MainWindow.Size.Width + 1, Application.MainWindow.Size.Height + 1) End If End Sub
P.S.: Es reicht nicht die Größe des Hauptfensters z.B. nur in der Breite kurz abzuändern... Falls jemand noch eine Lösung bei maximiertem Hauptfenster findet, bin ich weiterhin interessiert .
Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 04. Dez. 2009 14:41 <-- editieren / zitieren -->
Hi Sebastian, bei meinem Code oben hätte das AutoCAD-Fenster nur einmal gezuckt, bei Dir zweimal, ich denke meine Variante ist besser Ich werde noch suchen, ob es einen Window-Handle gibt, der upzudaten sein könnte. - alfred - ------------------ www.hollaus.at |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 04. Dez. 2009 15:36 <-- editieren / zitieren --> Unities abgeben:
Ja, da hast du teilweise recht. Aber wenn ich während eines "Programmdurchlaufs" öfter zwischen beiden Reitern hin und her wechsle, wird das Fenster immer kleiner und kleiner . Das wollte ich damit vermeiden. Alternativ könnte man vielleicht eine statische Variable nehmen, diese Toggeln und damit das AutoCAD Hauptfenster bei jedem Reiterwechsel mal größer und mal wieder kleiner werden lassen. Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 07. Dez. 2009 19:52 <-- editieren / zitieren --> Unities abgeben: Nur für sebastian.
Hallo Problem ist meiner Meinung nach ein Bug. Ich hatte auch versucht über das Auslesen der Größe die Größe beim Start wieder herzustellen. Wenn man die Größen-Werte zum Bsp beim Ändern der Größe im Debugger mal verfolgt, ändert sich nicht das, was sich ändern sollte. PaletteSet.Location.Y ist zum Bsp immer (PaletteSet.Location.X + PaletteSet.Size.Width) Ich habe das Hantieren mit Größenänderungen aufgegeben. Für das Wiederherstellen der Größenänderungen beim Starten (so dass diese so ist wie beim Verlassen) gibt es den folgenden Workaround: PaletteSet = new Autodesk.AutoCAD.Windows.PaletteSet("Palette Set Test", "palettedemo", new Guid("A7C6681F-B717-4226-B20D-3192ED552F5E")); Wenn man auf diesem Weg die PaletteSet erzeugt, übernimmt AutoCAD intern eben diese Einstellungen. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 07. Dez. 2009 19:55 <-- editieren / zitieren --> Unities abgeben:
Guten Abend Holger! Danke für die Infos. Das mit der Guid beim Erstellen des PaletteSet Objekts ist mir auch schon aufgefallen. Ohne Guid wird die Größe nicht gespeichert, mit Guid schon... Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Dez. 2009 20:00 <-- editieren / zitieren -->
Hi, Ergänzung, wenn wer in die Tiefe suchen will: die Größe & Position & Verankerung der Paletten wird mit den Arbeitsbereichen gespeichert. Ändert man die Einstellungen, speichert den Arbeitsbereich, dann wird auch beim nächsten Start die Einstellung so reproduziert wie zuvor gespeichert. >> ...Ohne Guid... Vorsicht: ohne GUID wird einiges mit Paletten nicht funktionieren, spätestens wenn mehrere Applikationen mit Paletten aktiv sind, dann wird's möglicherweise ziemlich problematisch. D.h. immer beim Erstellen einer neuen Palette, ob in der gleichen Applikation oder in einer anderen eine neue GUID erzeugen lassen und verwenden! - alfred - ------------------ www.hollaus.at |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|