Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Oberfläche einer VBA Anwendung gestalten?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von Ralf33 an!   Senden Sie eine Private Message an Ralf33  Schreiben Sie einen Gästebucheintrag für Ralf33

Beiträge: 52
Registriert: 27.09.2005

W2000
Autocad 2000
Athlon 64, 1 GB RAM

erstellt am: 02. Mrz. 2009 17:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


acad.jpg

 
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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Ralf33 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Ralf33 an!   Senden Sie eine Private Message an Ralf33  Schreiben Sie einen Gästebucheintrag für Ralf33

Beiträge: 52
Registriert: 27.09.2005

W2000
Autocad 2000
Athlon 64, 1 GB RAM

erstellt am: 02. Mrz. 2009 19:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Ralf33 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Ralf33 an!   Senden Sie eine Private Message an Ralf33  Schreiben Sie einen Gästebucheintrag für Ralf33

Beiträge: 52
Registriert: 27.09.2005

W2000
Autocad 2000
Athlon 64, 1 GB RAM

erstellt am: 02. Mrz. 2009 22:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Ralf33 10 Unities + Antwort hilfreich

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 Function

Function 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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz