| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Layout wechseln (1881 mal gelesen)
|
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 07. Sep. 2004 14:37 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, habe folgendes Problem. Ich möchte ein selectionset erstellen. Die auswahl erfolgt über "selectOnscreen". Ich möchte aber in diesem moment auch das Layout wechseln(für den rest des Progs wichtig). Wenn ich aber nun das Layout wechseln möchte, ist die Auswahl für das sels. natürlich schon aktiv. Wie lautet der Code für "vor dem Auswählen des sels. das Layout wählen das der Benutzer angeklickt hat"? Wenn jemand eine Idee hat bitte Antworten Danke schon mal im vorraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 07. Sep. 2004 21:49 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
|
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 07. Sep. 2004 22:04 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
Axel, ich glaube wir sehen das viel zu kompliziert, hab mich ehrlichgesagt auch nicht getraut was zu posten, weil's ich denne auch nicht verstanden habe. Wahrscheinlich - also ich mein nur ne dumme Idee - alle Layouts über eine listbox listen lassen, der User wählt eins und danach erst kommt selectOnScreen zum tragen ;-) Naja irgendsowas in der Art wahrscheinlich ... lg Nancy -- "Karen has her own i, and she is not going to let Frank put his data into it." - F. D. Boswell Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 08. Sep. 2004 09:01 <-- editieren / zitieren --> Unities abgeben:
Hallo nancy, genau so schauts aus! Hier ein kleiner Ausschnitt aus dem Code: Antwort = (MsgBox("Vorlage wählen", vbOKOnly, "Layout wechseln")) If Antwort = vbOK Then msg = vbCrLf & vbCrLf ' Start with a space For Each Layout In Layouts msg = msg & Layout.Name & vbCrLf Next
Set aws = ThisDrawing.SelectionSets.Add("ausw001") ThisDrawing.ActiveLayout = Layouts(1) aws.SelectOnScreen For Each ausw In aws 'If ausw = IAcadBlockReference Then varAttributes = ausw.GetAttributes vieleicz macht das die Sache etwas klarer? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 08. Sep. 2004 10:13 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
Hi Dan, naja klarer und so ... ;-) Hab's auf keinerlei Crash's getestet, nur mal so als ein (möglicher) Ansatz. lg Nancy --
Code:
'Modul Sub und_los() Dim sset As AcadSelectionSet frmLayouts.Show 0 Set sset = ThisDrawing.SelectionSets.Add("set01") sset.SelectOnScreen MsgBox sset.Count sset.Delete End Sub
Code:
'frmLayouts Private Sub UserForm_Initialize() Dim i% With ThisDrawing.Layouts For i = 0 To .Count - 1 ListBox1.AddItem .Item(i).Name Next End With End SubPrivate Sub ListBox1_Click() Dim i% With ListBox1 For i = 0 To .ListCount If .Selected(i) Then ThisDrawing.ActiveLayout = ThisDrawing.Layouts.Item(i) Exit For End If Next End With Unload Me End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 08. Sep. 2004 15:22 <-- editieren / zitieren --> Unities abgeben:
Danke für die Hilfe, wer möchte kann sich das Makro herunterladen. Mit dem Makro erstellt man einen Zeichnungsrahmen mit freier Größe oder mit DIN Formaten. Zusätzlich kann man sich noc einen Schriftkopf einfügen lassen. Außerdem kann man aus vorhandenen Schriftköpfen die Attribute übernehmen. Ihr müßt natürlich die Verzeichnisspfade an eure Bedürfnisse anpassen. Bis dann und viel Spaß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 09. Sep. 2004 23:50 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
Hallo Dan, vorweg: hab' lange überlegt, ob ich was schreibe und überhaupt, hoffe es kommt nicht falsch an, das wär schade. Ich find's erstmal schön, wennde deine fertigen Makros/dvb hier postest, aber wennde denne sowas schon machst, dann musste auch mit Kritiken leben aber macht nix, man kann eh' nur draus lernen. Ausserdem, im Lisp-Forum wird fast jede Zeile analysiert/diskutiert, hier wohl weniger, deswegen Dan pack' ich Dich jetz mal am Schopf ;-) Okay zum content: Möglicherweise hat das zipppen auch die *.dvb etwas verwirrt, keine Ahnung ;-) Wenn nicht, mal im Ernst, bissle kommentieren, daran ist noch keiner gestorben, und an gängigen Einrückungen auch noch nicht. Schaut alles wie bissel zusammenkopiert aus ... Auch ein 'Option Explicit' = Variablendeklaration erforderlich sh. im VBE unter Extras/allgemein, standardmässig zu aktivieren, ist keine schlechte Idee. Und warum immerwieder diese elenden Goto's ? Naja, war wohl weniger den 'content' betreffend, mehr nur an der Oberfläche gekratzt, zugegebenermaßen Ich wollt eigentlich nur sagen, dein Code ist recht schwer verständlich und gewöhn Dir diesen Programmierstil besser jetz als heute ab. Soll jetz nicht oberlehrerhaft klingen, aber glaub' mir ich hab' mal so ähnlich angefangen - zwar nicht unter Acad, egal - jedenfalls tust Du Dir damit in erster Linie selber einen Gefallen ;-) lg Nancy -- Give a man a fish, and he will eat for a day; Teach a man to fish, and he will eat for a lifetime. The moral? Read the manual. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 10. Sep. 2004 09:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Nancy, ich habe absolut kein Problem mit Kritik. Danke dafür!!! zum Code: Es war für mich das erste umfanreichere Makro das ich geschrieben habe und war erstmal glücklich das es bei mir läuft. Mit dem zusammenkopiert hast Du teilweise recht. Ich habe mir halt aus der Acad Hilfe und aus den Anregungen in diesem Forum die Sachen zusammen gesucht und umgestellt die ich brauchte. Da ich ein Newbe in Sachen VBA bin sieht das ganze halt etwas umstänlicher aus als es warscheinlich sein müßte. Mich würde Interresieren warum die Sache bei dir nicht läuft. Das ganze läuft bei mir unter Acad 2004. Außerdem sind in dem Makro Pfade angegeben die Du natürlich ändern must. Danke noch mal für die Kritik und poste mir bitte wo das Makro aussetzt Gruß Dan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 10. Sep. 2004 09:54 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
Hallo, @Nancy, bin froh, das Du den Anfang gemacht hast ... @Dan mir ging es ebenso wie Nancy. Auch ich wußte nix so recht mit deinem Code anzufangen. Ich lerne je gerne noch dazu, aber bei deinem Code ist einiges, was noch verbesserungswürdig ist. Es spricht auch nix dagegen, wenn man von Anderen den Code in sein Projekt mit einbindet, mach ich auch (FileDialoge, Drucker ermitteln, usw.). Man kann nicht alles wissen. Der Teil ist in Ordnung, aber bei deinem Code bleiben mir manche Sachen verborgen. - Warum steht in deinem Modul1 ein USERFORM_INITIALIZE? Sowas hat wenn dann in einem Formular zu stehen. - Ein UserFormular, welches man nur versteckt, sollte man nach beenden des Programmes auch entfernen -> 'Userform.Unload' - Die Checkboxen deines 'UserForm1', aktiviere mal 'nur Attribute übernehmen' und nun versuche es mal zu deaktivieren. - Die KomboBox des Forms füllt sich auchirgendwie nicht. Wozu ist die da? Die Funktion in der diese gefüllt werden soll wird auch nie aufgerufen. - Die VariablenDeklaration in 'startDin' .. hmm .. etwas sprechenderes wäre schon nicht schlecht und hätte auch für Dich beim programmieren Vorteile. - nicht benötigte oder leere Ereignisse in Formularen kann man rauslöschen - Deine ganzen gotos, versteh ich auch nicht. Das ist ein Auszug aus der Hilfe. Zitat: Anmerkung : Durch zu viele GoTo-Anweisungen wird der Code schwer verständlich, und das Testen des Codes wird schwieriger.
Das seh ich eigentlich genauso ... für solche Zwecke bietet sich ein Select Case an. Kannte die Gotos bisher nur aus der Fehlerbehandlung. Tja und von welchem Formular oder durch welche Funktion oder Sub sich dein Programm starten lässt, verschließt sich mir auch noch etwas, aber ich fänd es gut, wenn Du mal eine kleine Anleitung gibst, wie man das Programm benutzen kann. Nimm Dir das nicht zu Herzen, es sind gut gemeinte Ratschläge, die Du bei deinem nächsten Programm vielleicht mit einbringen könntest/solltest. In diesem Sinne .. Gruß TP ------------------
Code: For Each Person In This.Forum TP.Say "have a nice day!" Next Person
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 10. Sep. 2004 10:30 <-- editieren / zitieren --> Unities abgeben:
Tscha, äh was soll ich sagen, in der dvb Datei waren noch ne ganze menge von Beispielen und Postings aus dem Forum. Habe die Sachen jetzt gelöscht und die reine dvb Datei noch mal angehängt. @TP somit hat sich das mit Modul1 zur gänze erledigt ;-). Das mit Select Case habe ich heute Morgen zum erstenmal gelesen(Visual Basic für Dummies). Zitat: Die KomboBox des Forms füllt sich auchirgendwie nicht. Wozu ist die da? Die Funktion in der diese gefüllt werden soll wird auch nie aufgerufen. Doch sie füllt sich. Du musst bei "Sub ZRahmen()" starten. Das ganze dient dazu einen Zeichnungsrahmen mit oder ohne Schriftkopf im Papierlayout zu zeichnen. Die option "Attribute übernehmen" bietet die Auswahlmöglichkeit, aus einem vorhanden Layout in der Zeichnung die Attribute zu übernehmen. Im so sorry wegen "- Die Checkboxen deines 'UserForm1', aktiviere mal 'nur Attribute übernehmen' und nun versuche es mal zu deaktivieren." aber habe ich leider nicht hingbekommen (Schande über mich) Danke für die Anregungen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 10. Sep. 2004 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
Hallo Dan, ich war mal so frei, wie ich es mehr oder weniger machen würde ... Als Beispiel für ein Select Case an hand deiner dvb ... das könnte so tun, hab´s nicht ausprobiert ...
Code:
Select Case UserForm1.Combo1.Value Case DINA4 If ThisDrawing.ActiveSpace = acModelSpace Then MsgBox "wechsel in den Papierbereich", vbOKOnly ThisDrawing.ActiveSpace = acPaperSpace End If Antwort = MsgBox("bitte den Startpunkt in der linken unteren Ecke setzen", vbOKCancel, "Start") If Antwort = vbCancel Then MsgBox "Abbruch durch Benutzer": Exit Sub End If stpunkt = ThisDrawing.Utility.GetPoint(, "Startpunkt: ") If UserForm1.CheckBox1.Value = True Then MITA4 eina4, stpunkt Else OHNEA4 End If Case DinA3 .... Case Default 'irgendwas halt, wenn alle anderen nicht zutreffen End Select
und die Gotos, welche Du sonst immer aufrufst, könnte man als Funktionen schreiben. In etwa so
Code: Function mit_A4(eina4() As Double, stpunkt As Variant) eina4(0) = stpunkt(0) + 292: eina4(1) = stpunkt(1) + 5 Set kum = ThisDrawing.PaperSpace.InsertBlock(eina4, "c:\winnt\profiles\ta3prakti\desktop\din_rahmen\rahmen\ZKOPF_KLEIN.dwg", 1, 1, 1, 0) ohne_A4 End Function Function ohne_A4() ... End Function
die CheckboxenWerte bekommst Du über die Eigenschaft Value
Code: Option ExplicitPrivate Sub CheckBox3_Change() If CheckBox3.Value = True Then CheckBox1.Enabled = False CheckBox2.Enabled = False End If If CheckBox3.Value = False Then CheckBox1.Enabled = True CheckBox2.Enabled = True End If End Sub
Vielleicht hilft Dir das als Anstoß weiter, ich schreib Dir nachher mal, wie ich versuche dein Programm zu nutzen, da es mit nem Fehler abstürzt und ständig die linke Ecke abfragt. Besser wäre es, wenn Du mal erläuterst, wie man zu einem Ergebnis kommt, dann kann ich mal gezielt schauen, wo´s bei mir hängt. Gruß TP ------------------
Code: For Each Person In This.Forum TP.Say "have a nice day!" Next Person
[Diese Nachricht wurde von BloodyMess am 10. Sep. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 10. Sep. 2004 11:22 <-- editieren / zitieren --> Unities abgeben:
Hallo TP, das mit der unteren linken Ecke ist kein Fehler. Du mußt einfach nur im Papier Layout von unten links nach oben rechts ein Fenster ziehen. Die größe des Fensters ist dann dein Zeichnungsbereich. Du musst unten links anfangen damit die Punkte die berechnet werden um die Linien zu erzeugen auch an der richtigen Stelle sind. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 10. Sep. 2004 11:36 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
Hi Dan, der Fehler kommt durch die 2004er Dwgs, hab gerade nur 2000i zur Hand. Nehm das dann mal auf den anderen Rechner rüber, dann probier ich weiter. Aber der Fehler mit der linken Ecke, da hat er nicht nur einmal gefragt, ich glaub 3mal hatte er es wissen wollen. Gruß TP ------------------
Code: For Each Person In This.Forum TP.Say "have a nice day!" Next Person
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 10. Sep. 2004 12:03 <-- editieren / zitieren --> Unities abgeben:
|
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 10. Sep. 2004 21:53 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
Hallo Dan, hab dein Programm jetzt mal auseinandergenommen, das Ergebnis kannst Du Dir im Anhang mal anschauen. Hab´s nur mal für DIN A4 gemacht. Es ist sehr schwer sich durch fremden Code zu wurschteln, ohne irgendwelche Hinweise zu haben, naja sei´s drum. Was Du mit deinen Attributen da machst am Ende, das hab ich überhaupt nicht verstanden. Weiß auch nicht, was Du mit dem kopieren von den Attributen bezweckst. Kenne halt nur Blöcke, die Attribute haben, da hab ich nen paar genommen und das ausprobiert. Aber das gibt doch ne Liste, die ellenlang werden kann und dann? Wahrscheinlich tut´s das was Du willst, aber ein Beispiel wäre mal gut, um das zu verstehen. Also der letzte Teil deiner Function 'wahl' sind für mich böhmische Dörfer. Auskommentieren, Einrücken, deklarieren von sprechenden variablen erhöhen die lesbarkeit von code ungemein. Bin ja ehrlich, ich bin auch kein Freund von Code ausdokumentieren (Hallo Martin .. ) .. aber wenn Fremde den lesen sollen und verstehen sollen, dann kommst da nicht drum rum. Das war eigentlich der Hauptgrund, warum ich mich mit deinem Beispiel mal beschäftigt habe. Du solltest mal drauf achten deine Linien die Du da erzeugst, die landen in meinen Augen irgendwo, aber wozu sind die eigentlich? Faltkanten? hmmm .. naja sei´s drum. Bemerkungen sind im Code drinnen, hab Teile weggelöscht, ergänzt und umgebogen. Die flachsigen Bemerkunge im Code machen es für mich leichter den auszukommentieren und der Leser, weiß meist auch was los ist. Also nicht so Ernst nehmen. Wäre nett, wenn Du Dir das auch mal anschauen könntest, Schönes Wochenende .. Gruß TP ------------------
Code: For Each Person In This.Forum TP.Say "have a nice day!" Next Person
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|