| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Oberfläche einer VBA Anwendung gestalten? (1480 mal gelesen)
|
Ralf33 Mitglied

 Beiträge: 52 Registriert: 27.09.2005 W2000 Autocad 2000 Athlon 64, 1 GB RAM
|
erstellt am: 02. Mrz. 2009 17:11 <-- editieren / zitieren --> Unities abgeben:         
Hallo, wie gestaltet man eigentlich eine professionelle Oberfläche einer Autocad Anwendung? Ich bin gerade dabei eine Treppensoftware zu schreiben, aber die Oberfläche gefällt mir überhaupt nicht. Auf dem Bild ist nur das Anfangsstadium, ich habe mir da noch keine große Mühe gegeben aber ich weiß nicht so recht, wie ichs machen soll. Die Form sieht im Autocadfenster aus, wie ein Fremdkörper, eine Möglichkeit die Form an die rechte Seite andocken zu lassen, wenn sie gestartet wird wäre schon was, aber wüßte nicht, wie das funktioniert. Habe auch in der Richtung noch nichts groß gefunden, was mit VBA programmiert ist, vielleicht hat ja jemand ein paar Links oder Tips oder Beispielbilder, wie man so etwas attraktiv gestalten kann. Gruß Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 02. Mrz. 2009 18:44 <-- editieren / zitieren --> Unities abgeben:          Nur für Ralf33
Hallo Ralf, zunächst finde ich es viel wichtiger wenn das Proggi das macht was es soll und dabei stabil läuft. Es gibt auch viele andere Beispiele wo es eine Supermaske gibt aber kaum eine Funktion sauber läuft. Zur Gestaltung gibt es in VBA nicht ganz so viele Möglichkeiten wie in .net oder VB6. Du hast mit VBA keine Möglichkeit ein Fenster anzudocken, kannst jedoch jeweils die Größe und Position bestimmen. Grundsätzlich finde ich es gut, wenn Elemente die zusammen gehören von einem Gruppenfeld mit Überschrift zusammengefasst werden. Es ist auch zu überlegen ob man eine Eingabematrix z.B. in ein Grid oder Listenfeld mit Überschriften packt. Wenn du deine Maske klein halten willst kann man mehrere Seiten (Tabs) draufpacken. Im VBA kannst du das erreichen, wenn du die Elemente jeweils eines Tabs in ein eigenes Gruppenfeld packst und die Sichtbarkeit an bzw. Ausschaltest. So hast du einen Wizard Effekt. Vielleicht sind das ja schon mal ein paar Anregungen. Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf33 Mitglied

 Beiträge: 52 Registriert: 27.09.2005 W2000 Autocad 2000 Athlon 64, 1 GB RAM
|
erstellt am: 02. Mrz. 2009 19:05 <-- editieren / zitieren --> Unities abgeben:         
Hallo Wilfried, vielen Dank für deine schnelle Antwort. Ich hab schon befürchtet, das man mit VBA in dieser Richtung nicht allzuviele Möglichkeiten hat. Das mit den Tabs ist eine gute Idee, das werde ich gleich mal ausprobieren. Zitat: zunächst finde ich es viel wichtiger wenn das Proggi das macht was es soll und dabei stabil läuft. Es gibt auch viele andere Beispiele wo es eine Supermaske gibt aber kaum eine Funktion sauber läuft.
Da gebe ich dir Recht, aber ich habe hier ein selbstgebautet Aufmaßsysten für den Baubereich und das Programm soll da mitgeliefert werden. Also soll schon gut aussehen. Zitat: Du hast mit VBA keine Möglichkeit ein Fenster anzudocken, kannst jedoch jeweils die Größe und Position bestimmen.
Da finde ich eben keine Möglichkeit habe, ich ein Brett vor den Kopf? Ich kann es zwar zentriert starten lassen, aber wie könnte ich es hinbekommen, das es mit der rechten Bildschirmkante abschließt? (außer es da jedesmal hinzuschieben) Ideal wäre, das Autocad Fenster dann automatisch so zu verkleinern, das sie exakt nebeneinander liegen. Also beide Fenster die gleiche Höhe, das VBA Fenster belegt das rechte Viertel des Monitors und Autocad füllt den Rest aus. Kann man das irgendwie machen? Gruß Ralf
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 02. Mrz. 2009 19:16 <-- editieren / zitieren --> Unities abgeben:          Nur für Ralf33
Hallo Ralf, das ist wohl noch nicht die ganze Antwort aber.. Du musst für deine Form die StartUpPosition auf manuell setzen. Bei der Intialisierung kannst du die Position bestimmen Code: Me.Left = ThisDrawing.Application.WindowLeft + 20 Me.top = ThisDrawing.Application.WindowTop + 20 ''oder Me.Left = 0 Me.top = 50 ThisDrawing.Application.WindowState = acNorm ThisDrawing.Application.WindowLeft = Me.Width
Mir war irgendwie so das man auch die Position der Dokumentenfenster einstellen kann, nur ich finde es auf die Schnelle nicht.Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf33 Mitglied

 Beiträge: 52 Registriert: 27.09.2005 W2000 Autocad 2000 Athlon 64, 1 GB RAM
|
erstellt am: 02. Mrz. 2009 22:16 <-- editieren / zitieren --> Unities abgeben:         
Hallo Wilfried, prima, es hat geklappt Code: Me.Left = 770 Me.top = 0 ThisDrawing.Application.WindowState = acNorm ThisDrawing.Application.WindowLeft = 0 ThisDrawing.Application.WindowTop = 0 ThisDrawing.Application.Height = 1050 ThisDrawing.Application.Width = 1285
Das positioniert die Fenster schön nebeneinander. Jetzt müßte man nur noch die Bildschirmauflösung abfragen können, damit es auf verschiedenen Monitoren läuft. Vielen Dank und einen schönen Abend! Gruß Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 02. Mrz. 2009 22:18 <-- editieren / zitieren -->
Hi, geht 'Screen.Height' und 'Screen.Width' in VBA, sollte eigentlich, nur im Augenblick kann ich's nciht probieren. - alfred - ------------------ www.hollaus.at |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 03. Mrz. 2009 10:49 <-- editieren / zitieren --> Unities abgeben:          Nur für Ralf33
Hallo, IMHO steht das SCREEN Objekt in VBA nicht zur Verfügung. Als Würgaround könnte man die Width und Height Werte von AutoCAD im maximierten Zustand auslesen. Ansonsten über die API
Code: Declare Function GetDeviceCaps Lib "Gdi32" _ (ByVal hdc As Long, ByVal nIndex As Long) As Long Declare Function GetDC Lib "User32" _ (ByVal hWnd As Long) As Long Function HRes() As Integer 'Returns the horizontal resolution in pixels Dim lDC As Long lDC = GetDC(0) HRes = GetDeviceCaps(lDC, 8) ReleaseDC 0, lDC End FunctionFunction VRes() As Integer 'Returns the vertical resolution in pixels Dim lDC As Long lDC = GetDC(0) VRes = GetDeviceCaps(lDC, 10) ReleaseDC 0, lDC End Function
In VB6 verwende ich folgende Funktion um ein Formular über alle anderen zu bringen. Mit der Funktion wird auch die Position gesetzt. Damit müsste man eigentlich auch ein Dokumentenfenster innerhalb von AutoCAD positionieren können. Aber es wird auch das Screen Objekt benötigt.
Code: ' Fensterpostion und Anzeigereihenfolge (immer oben setzen) Declare Function SetWindowPos& Lib "user32" (ByVal hwnd&, ByVal WndInsertafter&, ByVal x&, ByVal y&, ByVal CX&, ByVal CY&, ByVal wFlags&) 'BSP: SetWindowPos Me.hwnd, hwnd_Topmost, Me.Left / Screen.TwipsPerPixelX, Me.Top / Screen.TwipsPerPixelY, Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY, swp_Showwindow Public Const swp_Showwindow = &H40 Public Const hwnd_Topmost = -1
Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |