| | | 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: AutoCad-Hauptfenster ist nicht sichtbar (2206 mal gelesen)
|
Theo37 Mitglied Techniker
Beiträge: 426 Registriert: 08.10.2008 ACAD 2024 WIN 7 64bit Intel Xenon CPU E5-1620 3.60GHz 16GB RAM
|
erstellt am: 28. Sep. 2010 14:39 <-- editieren / zitieren --> Unities abgeben:
Hallo an Alle, ich habe folgendes Problem: Ich öffne eine userform mit showdialog. Lasse dem benutzer ein paar eintragungen machen. Dann schließe ich die form wieder mit hide und dispose. Anschließend möchte ich dem Benutzer ein Attribut auswählen lassen. Dazu verwende ich: ThisDrawing.Utility.GetSubEntity(Ding, Point, Matrix, Context, "Nächstes Attribut: ") An dieser stelle bekomme ich die Fehlermeldung "AutoCad-Hauptfenster ist nicht sichtbar" Wie vermeide ich das. Danke. Theo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 28. Sep. 2010 19:13 <-- editieren / zitieren -->
Hi, wenn Du den Fokus in einem Formular hast, dass Du dann 'unterm Hintern wegputzt', dann kann es durchaus mal vorkommen, dass keine App den Fokus hat (zumindest wenn das Form nicht modal gestartet war, ist die Gefahr dazu ziemlich groß). Was mich aber doch wundert: eigentlich solltest Du mit der Maus dann das AutoCAD-Fenster aktivieren können. Wie sieht denn in diesem Zustand der Cursor aus? Fadenkreuz oder so als wäre AutoCAD ausgelastet? Probier mal (hab's jetzt nur mal im VBA von Syntax her abgeluxt, nicht mit dotNET probiert): AppActivate ThisDrawing.Application.Caption - alfred - PS: den Code vor und nach Form.Hide wäre ev. wichtig, wenn Du den so isolieren kannst, dass etwas lesbares für Nichtwisser (Deines GesamtCodes) herauskommt. ------------------ www.hollaus.at |
Theo37 Mitglied Techniker
Beiträge: 426 Registriert: 08.10.2008 ACAD 2024 WIN 7 64bit Intel Xenon CPU E5-1620 3.60GHz 16GB RAM
|
erstellt am: 29. Sep. 2010 09:08 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Alfred, wenn ich aus VB heraus debugge, dann bekomme ich die Fehlermeldung an der Programzeile. Wenn ich den Befehl in ACAD selber starte dann kommt die Fehlermeldung in AutoCAD. Das Program(AutoCad) ist dabei ganz normal. Wenn ich die zeile: AppActivate ThisDrawing.Application.Caption ausführe, dann kommt die Fehlermeldung: "Der Prozess(0) wurde nicht gefunden" Ein Auszug aus dem Code: Sub aktion() Dim Ding As AcadAttributeReference Dim Point As Object Dim Matrix As Object Dim Context As Object Dim Ersetzen As Boolean Dim Antwort As MsgBoxResult Stellen = CType(myForm.TextBox2.Text, Integer) Start = CType(myForm.TextBox3.Text, Integer) Text = myForm.TextBox1.Text myForm.Dispose() Do While Weiter = True VorText = Text & Nullen & Start.ToString Try AppActivate(ThisDrawing.Application.Caption) ThisDrawing.Utility.GetSubEntity(Ding, Point, Matrix, Context, "Nächstes Attribut: ") If Ersetzen Then Ding.TextString = VorText If Ersetzen = False Then Ding.TextString = Ding.TextString & VorText Weiter = True Start = Start + 1 Catch ex As Exception Antwort = MsgBox("Fertig?", MsgBoxStyle.YesNo, "Zahl") If Antwort = MsgBoxResult.No Then Weiter = True End Try Loop End Sub Wenn ich es so mache, also mit dem Try, dann bekomme ich keine Fehlermeldung, sondern es kommt sofort die MSGbox. Lasse ich das Try weg, kommt unweigerlich die Fehlermeldung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theo37 Mitglied Techniker
Beiträge: 426 Registriert: 08.10.2008 ACAD 2024 WIN 7 64bit Intel Xenon CPU E5-1620 3.60GHz 16GB RAM
|
erstellt am: 29. Sep. 2010 14:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, ich habe das Problem jetzt gelöst indem ich alle Prozeduren direkt von der Klasse aus starte und nicht von der Userform aus. Ist zwar etwas umständlicher, funktioniert aber. Ich verstehe zwar nicht ganz wieso, aber irgendwie hatte dieses Problem wieder etwas mit: Public Shared myForm As Zahldia = Nothing myForm = New Zahldia zu tun. Eine andere Frage habe ich noch. Wenn ich dem User mit GetSubEntity ein Attribut auswählen lasse, dann erwischt man sehr oft einen Solid der dahinter liegt. Gibt es ne Möglichkeit daß nur noch attribute ausgewählt werden, oder daß zumindest die Wahrscheinlichkeit steigt eines zu erwischen. ich wäre für jeden Tipp dankbar. mein bisheriger Code dazu: Try ThisDrawing.Utility.GetSubEntity(Ding, Point, Matrix, Context, "Attribut: ") myForm.TextBox1.Text = Ding.TextString Catch ex As Exception MsgBox("Sorry das ging schief.") End Try
Danke Theo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 30. Sep. 2010 10:00 <-- editieren / zitieren -->
Hi, ich hätte in diesem Fall (beim ersten Klick nicht die AttributReference erwischt) den retournieren Punkt dazu verwendet, um nachzuhaken. Also erstmal normale Vorgehensweise, wie Du diese hast. Wurde kein Attribut erwischt, dann hol Dir die Attribute der BlockReference, für jedes Attribut die Extents (BoundingBox) und guck nach, ob der zuvor retournierte Punkt innerhalb oder ausserhalb der Boundingbox liegt. Vorsicht natürlich dabei: bei nicht waagrecht oder nicht senkrecht gestellten Attributen wird die BoundingBox relativ groß und kann ein Punkt könnte da schon innerhalb mehrerer Extents liegen. - alfred - ------------------ www.hollaus.at |
Theo37 Mitglied Techniker
Beiträge: 426 Registriert: 08.10.2008 ACAD 2024 WIN 7 64bit Intel Xenon CPU E5-1620 3.60GHz 16GB RAM
|
erstellt am: 30. Sep. 2010 14:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, an deinen Vorschlag traue ich mich ehrlich gesagt nicht heran. Ich denke das könnte ganz schön schwierig werden und auch zur Laufzeit störanfällig sein. ich habs mal mit ner Krücke probiert. Und habe folgenden Code eingebaut: Dim Solid as Boolean Solid = ThisDrawing.Preferences.SolidFill ThisDrawing.Preferences.SolidFill = False ThisDrawing.Regen(AcRegenType.acActiveViewport) . . . Ende: ThisDrawing.Preferences.SolidFill = Solid Funktioniert eigentlich recht gut, nur bei sehr großen zeichnungen, dauert das Regenerieren etwas. Ist aber eigentlich nicht schlimm. Nur das Zurückstellen am Ende funktioniert nicht. Ich denke es liegt an: Solid = ThisDrawing.Preferences.SolidFill Wie muß ich den Wert übergeben damit Solid danach seinen Wert behält und nicht mehr ändert. Danke, Theo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 30. Sep. 2010 14:55 <-- editieren / zitieren -->
Hi, probiers mal mit der Variable FILLMODE auf 0 bzw. danach zurück auf 1 stellen. - alfred - ------------------ www.hollaus.at |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|