Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Listview - Vom ausgew. Listview-element zum dazugehörigen Block

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
Autor Thema:  Listview - Vom ausgew. Listview-element zum dazugehörigen Block (4735 mal gelesen)
steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 17. Feb. 2009 18:39    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 Leute,

bisher hatte ich nur in AutoLisp programmiert und habe mich jetzt ach mal in VBA versucht.
Habe die gestellte Aufgabe aber nur zu 50% gelöst. Vielleicht kann einer von Euch mir einen Tipp geben.
Ich habe ein ListView Formular intialisiert, in dem ich alle Blöcke mit dem Namen Flächenstempel in das Listenfeld einlese. In jeder Zeile des Listview -fensters stehen
die 4 Attribute des jeweiligen Blockes. z. B.

1001 Bef. Fläche  Beton      105,56 
1002 Unbef.Fläche Mutterboden 95,54
...

Jetzt möchte ich durch Auslösen eines Doppelklicks auf ein Listenelement(Zeile) einen Verweis auf den entsprechenden Block erstellen, um auf ihn zommen und ihn hervorheben zu können.

Der wesentliche Quelltext dazu:
' Bilden eines Auswahlsatzes aller Blöcke mit dem Namen Flächenstempel in der Variablen ssnew

ThisDrawing.SelectionSets.Item("TBLK").Delete
Set ssnew = ThisDrawing.SelectionSets.Add("TBLK")
EntGrp(0) = 2
EntPrp(0) = "FLÄCHENSTEMPEL"
ssnew.Select acSelectionSetAll, Pt1, Pt2, EntGrp, EntPrp
Auswahlsatz1 = ssnew.Count

' Der Auswahlsatz wird durchlaufen und die Attributwerte jedes gefunden Blockes
' werden in eine Zeile des ListView -Fensters geschrieben
For a = 0 To Auswahlsatz1 - 1
    Tatts = ssnew.Item(a).GetAttributes
    Set LV = ListView1.ListItems.Add(, , Tatts(0).TextString)
    Set LV1 = LV.Listsubitems.Add(Text:=Tatts(1).TextString)
    Set LV2 = LV.Listsubitems.Add(Text:=Tatts(2).TextString)
    Set LV3 = LV.Listsubitems.Add(Text:=Tatts(3).TextString)
next


' In dieser Funktion soll aus dem ausgewählten Listenelement der dazugehörigre Block
' ermittelt werden

Public Sub ListView1_DblClick()
'Beispilecode, wenn von einem Listenelement auf eine Blockdefinition der Zeichnung     
' zugegriffen wird
Set BLKdef = Thisdrwaing.Blocks(ListView1.SelectedItem.Text)
' Übertragen auf mein Beispiel , vom Listenelement zu dem dazugehörigen Element meines 
'  Auswahlsatze "ssnew" müßte der Code folgende Form haben, was aber leider nicht
' funktioniert :


Set Atrsel = ssnew.Item(ListView1.SelectedItem)

End Sub


##########

Kann mir jemand sagen, wie ich den Verweis vom Listenfeld zum Block definieren muss.
Oder geht es doch nicht in dieser Form und ich muss noch ein zusätzliches Array definieren.
Ich bin gespannt, ob mir jemand helfen kann.

Gruß Volker

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 17. Feb. 2009 21:13    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 steinemann09 10 Unities + Antwort hilfreich

Hallo Volker,

im Node.TAG kannst du z.B. die Werte für ein Objekt (1),die Objektreferenz (2), oder eine eigene Klasse "speichern".

1. Speichern des Handles
LV.TAG = ssnew.Item(a).handle
mit
Set ent = ThisDrawing.HandleToObject(ListView1.SelectedItem.tag)
ent.Highlight True
hast du wieder die Referenz

2. Speichern der Objektreferenz
Set LV.tag = ssnew.Item(a)
mit
Set Ent = ListView1.SelectedItem.tag
hast du wieder die Referenz

3. Eigene Klasse
myClass.Rechtswert = InsPkt(0)
myClass.Hochwert = InsPkt(1)
myClass.Handle = ssnew.Item(a).handle
Set LV.Tag = myClass

dann hast du direkt die Koordinaten zum ranzoomen.

Wenn du das mit der eigenen Klasse machen willst kannst du ja nochmal nachfragen. (Hab jetzt leider keine Zeit mehr für ein Beispiel)

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

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 17. Feb. 2009 23:23    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, es war mir eine große Hilfe. Varainte 1 und 2 war für mich auf Anhieb leicht nachvollziehbar. Wegen der Klassendefinition werde ich mich morgen nochmal melden, wenn Du so freundlich bist, mich dabei unterstützen zu wollen.

Danke, Gruß Volker

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 18. Feb. 2009 18:38    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,

ich habe das zoom - Problem über die Koordinatenabfrage  der
InsertionPoint - Eigenschaft der Objektrefernez gelöst (Deine Variante
2).

attr_pkto = ent.InsertionPoint

Nun tun sich 2 weitere Probleme auf

1. Nach dem Zoom auf das Blockattribut soll der Anwender die Möglichkeit bekommen, in der Zeichnung zu editieren. Danach soll
er das Formular wieder aktivieren können. Ich dachte, ich könnte das
Formular ungebunden aufrufen, was aber zur Folge hat, dass ich Textfelder nicht editieren kann, und im Listview - Feld man sich nicht
mit der Pfeiltaste von Zeile zu Zeile bewegen kann. Mit einer "If then
-Anweisung lässt sich der Formularanzeigestatus auch nicht ermitteln

if me.show = true then

oder if thisdrawing.activate = true then...

führen auch nicht zum Erfolg

Kannst Du mir eine Strategie nennen für dieses Problem

2. Ich erzeuge die Spaltenüberschriften während der Laufzeit des Programmes. Ich finde keine Möglichkeit, in der aktiven Zeile
den Wert einer Spalte zu verändern bzw. Spalten für das Editieren zu sperren. Da ich über die Objektreferenz an die Attributwerte herankomme, könnte ich über den geänderten Listenfeldwert den ursprünglichen Attributwert überschreiben. Oder muss ich die Spalten
im Formular definieren, um darauf zugreifen zu können.

Wenn es Deine Zeit erlaubt, würde ich mich über eine Antwort sehr freuen.

Gruß Volker


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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 19. Feb. 2009 16:36    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 steinemann09 10 Unities + Antwort hilfreich

Hallo Volker,

wenn ein Formular gebunden ist (modal=1) kannst du es mit me.hide ausblenden und hast so wieder Zugriff auf AutoCAD. Danach kannst du es wieder mit FOrm1.show anzeigen. Der Nachteil ist, dass du eventuelle Änderungen (Position, Eingaben etc) vor dem ausblenden auf "zwischenspeichern" musst (InI Datei oder als globale Variable) und nach dem erneuten Laden diese wieder herstellen musst.

Im Listview kannst du die automatische Bearbeitung des Nodes abstellen (meine es wäre AutoLabel=false). Die weiteren Spalten kannst du eh nicht im Listview bearbeiten. Eventuell machst du bei einem Doppelklick auf das Node ein Eigenschaftenfenster auf. Das kannst du ja modal machen um die Werte zu ändern. Wird das Fenster mit OK geschlossen kannst du das Listview Element und die Zeichnung nachführen.

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

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 23. Feb. 2009 18:12    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,

ich hoffe, Du schaust Dir noch den Vorgang an, dass Du eventuell auf meine Fragen noch reagieren kannst. Danke für Deine Hinweise, Formular einblenden und  ausblenden me.show
und me.hide ist mir soweit klar, aber mein Problem ist, wenn ich nach "thisdrawing" wechsele ohne direkt vom Formular ein AutoCAD - Befehl zu starten, kann ich nicht mehr in das Formular zurückkommen.

Aber vorerst habe ich leider noch ein gravierenders Problem:

Wenn ich von meinem Listview1 einn Doppelklick Ereignis auslöse und mir ein Unterformular öffne, in dem ich in 5 Textfeldern die Attributwerte meines im Listview1 ausgewählten Blockes anzeigen lasse und den Eintrag der Textfelder ändern möchte, wie Du es mir vorgeschlagen hast,(bishier funktioniert mein Programm noch), gehen mir beim Click - Ergeignis meiner Befehlsschaltfläche des Unterformulares die Verweise auf mein Auswahlsatz sowie auf den ausgewählten Listeneintrag verloren. Dazu der relevante Quelltext:

Public Sub ListView1_DblClick()

' Verweis auf den Inhalt eines  Listview -Unterlementes
Set LS = ListView1.SelectedItem.ListSubItems.Item(1)
' Verweis auf das entsprechende Element des Auswahlsatzes
Set ent = ListView1.SelectedItem.Tag
' Attribut des ausgewählten Blockes
att_name = ent.GetAttributes

'Übergabe der einzelnen Attributwerte an die Textfelder meine Unterformulares
UserForm1.TextBox1.Value = att_name(0).TextString
UserForm1.TextBox2.Value = att_name(1).TextString
UserForm1.TextBox3.Value = att_name(2).TextString
UserForm1.TextBox4.Value = att_name(3).TextString
UserForm1.TextBox6.Value = att_name(4).TextString
' Anzeigen des Unterformulares
UserForm1.Show
End Sub

Public Sub CommandButton1_Click()
' Beim Klicken der Befehlsschaltfläche des Unterformulares
' kann ich den Wert des Textfeldes weder an das Element des Auswahlsatzes übergeben
ssnew.Item(a).GetAttributes(1).Text = UserForm1.TextBox2.Value
' oder
att_name(1).TextString = UserForm1.TextBox2.Value

'noch den Textinhalt rückführen an das Unterelement des ausgewählten Listenfeldes

LS = UserForm1.TextBox2.Value

End Sub

Ich habe auch versucht, Variablen global zu definieren, aber alles leider ohne Erfolg.
Leider hat es bei mir noch nicht Click gemacht in Sachen VBA, ich hoffe, der Zustand wird bald eintreffen. Es sind grundlegende Sachen, die ich aber trotz Literaturstudium leider
nicht habe lösen können. Vielen Dank im vorraus für Deine Schützenhilfe.


Gruß Volker

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - ACA 2013
Arcibem
System:
Windows NT, 2000, XP
Internet-Startseite:
http://www.archi.de

erstellt am: 23. Feb. 2009 19:50    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 steinemann09 10 Unities + Antwort hilfreich

Hallo Volker,
Zitat:
...Ich dachte, ich könnte das Formular ungebunden aufrufen,..
Kann man auch. Schau Dir dazu mal das Kontrollfeld AcFocusCtrl an.

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 23. Feb. 2009 21:13    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 Henning,

kann leider das Kontrollfeld AcFocusCtrl nicht finden, weder in der VBA - Umgebung noch im Objekt - Katalog. Wenn Du mit den Ort, wo ich es finden kann, kurz noch beschreiben könntest, wäre schön,

Danke Volker

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - ACA 2013
Arcibem
System:
Windows NT, 2000, XP
Internet-Startseite:
http://www.archi.de

erstellt am: 23. Feb. 2009 21:31    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 steinemann09 10 Unities + Antwort hilfreich

Hallo Volker,
Rechtsklick auf die Werkzeugsammlung (Toolbox), zusätzliche Steuerelemente, ACFOCUSCTRL:

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 24. Feb. 2009 15:31    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 Henning,

danke für Deine Angabe zum Kontrollfeld ACFocusCtrl. Ich habe das Steuerelement hinzugefügt. Leider ist es nur in der Entwurfsansicht sichtbar, so dass ich die Funktionsweise des Feldes nicht nachvollziehen kann.

Im Zuge der Formularsteuerung habe ich als AutoCAd- VBA -Neuling leider noch ein anderes Problem, was ich nicht lösen kann, wenn Du die letzen Beiträge Dir angesehn hast, kannst Du Dir im Groben eine Vorstellung machen. Ich habe es Dir nochmal wie folgt zusammengefasst.
Vielleicht kannst Du, wenn es nicht zu zeitintensiv ist, einen Tipp geben.


Wenn ich von meinem Listview1 einn Doppelklick Ereignis auslöse und mir ein Unterformular öffne, in dem ich in 5 Textfeldern die Attributwerte meines im Listview1 ausgewählten Blockes anzeigen lasse und den Eintrag der Textfelder ändern möchte, gehen mir beim Click - Ergeignis meiner Befehlsschaltfläche des Unterformulares die Verweise auf mein Auswahlsatz sowie auf den ausgewählten Listeneintrag verloren. Dazu der relevante Quelltext:

Public Sub initattrlist()
' Der Atributwert eines Auswahlsatzes wird an ein Listnview übergeben
Set LV = ListView1.ListItems.Add(, , Tatts(0).TextString)
    Set LV.Tag = ssnew.Item(a) ' Speichern der Objektreferenz
End sub

Public Sub ListView1_DblClick()
' Doppelklick auf die ausgewählte Zeile des Listenelementes
' Verweis auf den Inhalt eines  Listview -Unterlementes
Set LS = ListView1.SelectedItem.ListSubItems.Item(1)
' Verweis auf das entsprechende Element des Auswahlsatzes
Set ent = ListView1.SelectedItem.Tag
' Attribut des ausgewählten Blockes
att_name = ent.GetAttributes

'Übergabe der einzelnen Attributwerte an die Textfelder meine Unterformulares
UserForm1.TextBox1.Value = att_name(0).TextString
UserForm1.TextBox2.Value = att_name(1).TextString
UserForm1.TextBox3.Value = att_name(2).TextString
UserForm1.TextBox4.Value = att_name(3).TextString
UserForm1.TextBox6.Value = att_name(4).TextString
' Anzeigen des Unterformulares
UserForm1.Show
End Sub

Public Sub CommandButton1_Click()
' Beim Klicken der Befehlsschaltfläche des Unterformulares
' kann ich den Wert des Textfeldes weder an das Element des Auswahlsatzes übergeben
ssnew.Item(a).GetAttributes(1).Text = UserForm1.TextBox2.Value
' oder
att_name(1).TextString = UserForm1.TextBox2.Value

'noch den Textinhalt rückführen an das Unterelement des ausgewählten Listenfeldes

LS = UserForm1.TextBox2.Value

End Sub

Ich habe auch versucht, Variablen global zu definieren, aber alles leider ohne Erfolg. Die Variable "att_name" steht mir in dem Click-Ereignis der Befehlsschaltfläche des Unterfomulares einfach nicht zur Verfügung.
Vielleicht hast Du eine Anregung,

Danke Volker

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 24. Feb. 2009 17:26    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 steinemann09 10 Unities + Antwort hilfreich


listview.jpg


listview.dvb.txt

 
Hallo Volker,

anbei mal ein Beispiel wie du die Werte übergeben kannst.

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - ACA 2013
Arcibem
System:
Windows NT, 2000, XP
Internet-Startseite:
http://www.archi.de

erstellt am: 24. Feb. 2009 18:41    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 steinemann09 10 Unities + Antwort hilfreich


layershow.dvb.txt

 
Hallo Volker,
da Wilfried ja sich schon der Wertübergabe angenommen hat, hier ein kleines Beispiel, wie das Kontrollfeld ACFOCUSCTRL wirkt. Wichtig ist, dass Du beim Dialogfeld showmodal auf false setzt. Dann kannst Du das Dialogfeld offen lassen, und irgendwas in der Zeichnung tun (Block auswählen z.B.) und auf die Auswahl wieder reagieren. Im Beispiel mal mit Layer.

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 25. Feb. 2009 09:28    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 Henning,

danke für das Beispiel, obwohl ich auch ADT 2005 verwende, kann ich die DVB zwar laden, aber das Makro nicht ausführen(Speicher zugrifssverletzung). Aber an den Code für das Modul und das Formular
komme ich ran, aber nicht an das Objekt. Vielleciht kannst Du mir die die Datei nochmal gezippt in den Anhang setzen.

Danke Volker

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 25. Feb. 2009 09:48    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,

danke für das Beispiel, obwohl ich auch ADT 2005 verwende, kann ich die DVB zwar laden, aber das Makro nicht ausführen(Speicherzugrifssverletzung). Habe es auch in AC 2006 und 2008 versucht.

An die Codes für das Modul und das Formular komme ich ran, aber nicht an die Formularobjekte . Vielleicht kannst Du mir die die Datei nochmal gezippt in den Anhang setzen. Ich baue Dein Beispiel mit meinen Varaiblen nach und werde dann weitersehen.

Das Problem wird aber weiterhin sein, dass ich die Textfeldwerte an das Attribut nicht zurückführen kann, weil in der Click- Prozedur der Befehlsschaltfläche des Unterformulares mir der Auswahlsatz der Blockattribute nicht zur Verfügung steht.

Danke für die Mühen,

Volker

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - ACA 2013
Arcibem
System:
Windows NT, 2000, XP
Internet-Startseite:
http://www.archi.de

erstellt am: 25. Feb. 2009 09:50    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 steinemann09 10 Unities + Antwort hilfreich


layershow05.dvb.txt

 
OK,
jetzt mit '05 erstellt und getestet.

Grüsse, Henning

[ich sollte jetzt endlich mal meine Sysinfos aktualisieren......done]
------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

       http://www.voxelman.de

[Diese Nachricht wurde von wronzky am 25. Feb. 2009 editiert.]

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 25. Feb. 2009 10:55    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 steinemann09 10 Unities + Antwort hilfreich


listview.zip

 
Hallo Volker,
Zitat:
...obwohl ich auch ADT 2005 verwende, kann ich die DVB zwar laden, aber das Makro nicht ausführen(Speicherzugrifssverletzung). Habe es auch in AC 2006 und 2008 versucht.

Habe es mit AC2008 gemacht, aber auch mit AC2004 probiert und läuft.
Vielleicht liegt es an dem verwendeten ACFocusControl. Ich nehme es mal raus. Du brauchst es ja nur neu ins Formular einfügen. Ein zusätzlicher Code ist nicht notwendig. Allerdings funktioniert es auch ohne. Mit Control sieht es nur eleganter aus.
Zitat:
...Das Problem wird aber weiterhin sein, dass ich die Textfeldwerte an das Attribut nicht zurückführen kann, weil in der Click- Prozedur der Befehlsschaltfläche des Unterformulares mir der Auswahlsatz der Blockattribute nicht zur Verfügung steht.

Doch kannst du. Das Eigenschaftenformular wird ja gebunden geöffnet. Der Programmcode in deinem Hauptfenster wird erst fortgesetzt wenn das Eigenschaften Formular geschlossen wird.
Da kommt dann dein Code zur aktualisierung des Blockes mit den Attributen rein. Die Referenz zum Block hast du doch im TAG des Listviewnodes gespeichert.

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

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 25. Feb. 2009 18:13    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,

echt Klasse, das Beispiel ist super dokumentiert und ist für mich sehr lehrreich, ich werde nach und nach vom AutoLisp nach VBA wechseln. Ich hoffe, ich habe nicht zu sehr genervt und bedanke mich nochmals für Deine Hilfe. Wenn mein Programm läuft, melde ich mich nochmal.

Dannke Volker

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 25. Feb. 2009 18:21    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 Henning,

danke für das Beispiel, jetzt läuft es einwandfrei. Wenn ich das Problem, bei dem mir
Wilfried geholfen hat, gelöst habe, werde ich mich in die Problematik mit den ungebunden Formularen und dem Kontrollfeld vertiefen(hat bei meinen gestrigen Test noch nicht funktioniert, aber mit Deinem Beispiel, werde ich der Sache näher kommen).

Gruß Volker 

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 25. Feb. 2009 21:23    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 steinemann09 10 Unities + Antwort hilfreich

Hallo Volker,

das Problem mit den ungebunden/gebundenen Formularen ist eigentlich ganz einfach.
In meinem Beispiel wird durch die Sub ZEIGEFORMULAR die Userform1 ungebunden aufgerufen.
Ein Doppelklick auf ein Listview Item öffnet das Eigenschaften Formular gebunden.
Was unschön ist, aber der Lösung keinen Abbruch tut, ist das sich das Formular etwas ungewöhnlich verhält und nach einer Interaktion immer wieder den Fokus verliert.

Das kannst du, wie Henning schon zuvor beschrieben hat, vermeiden in dem du das ACFOCUSCTRL Control aus der Werkzeugpalette in die Userform1 ziehst. Zusätzlicher Programmcode ist nicht notwendig.

Wenn du nun das Formular mit der gleichen Sub startest wirst du den Unterschied sehen.
IMHO gibt es höchtens später ein Problem wenn man die DVBs zwischen Rechner mit unterschiedlichen AutoCAD Versionen austauschts. Dann wird wohl unter Umständen eine andere nicht kompatible Version des Kontolls verwendet.

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

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 02. Mrz. 2009 17:52    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,

habe mein Programm mit Deinen wertvollen Tipps super zum Laufen bekommen. Mit dem Kontrollfeld ACFOCUSCTRL hat es auch funktioniert.
Habe die Wirkungsweise verstanden.
2 kleine Schönheitsfehler habe ich allerdings noch zu meistern.

a) Wie Du schon mal angedeutet hast, verliere ich den Focus der Listenzeile, wenn ich nach dem Dopplelklick mir das Eigenschaftsfenster anzeigen lasse. Wenn ich mit

aw = Me.ListView1.SelectedItem.Index

' die ausgewählte Zeile sichere

' und mir nach der

If actionOK Then ' Anweisung

' mit
Me.ListView1.ListItems(aw).Selected = True

die Zeile wieder markieren will, erscheint zwar keine Fehlermeldung,
aber die Zeile wird im Listview1 - Fenster nicht wieder markiert.

Gibt es dazu eine einfache Lösung?

b) Gibt es eine API oder Standardfungktion zum Minimieren meiner Userform1 und eine Möglichkeit zur Laufzeit die Formulargröße mit der Maus zu ändern? Habe dazu keine Funktionen gefunden.

Im vorraus danke für Deine Mühen,


Volker

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 02. Mrz. 2009 19:04    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 steinemann09 10 Unities + Antwort hilfreich

Hallo Volker,

zu 1 sollte es reichen wenn du zur Intitialierung des Listviews folgende Zeile hinzufügst

Code:
    Me.ListView1.HideSelection = False

Deine Erweiterungen nimmst du wieder raus.
Alternativ kannst du das natürlich auch in den Eigenschaften einstellen.

zu 2 du kannst das Formular mit me.hide ausblenden. Das hat aber die schon angesprochenen Konsequenzen.

Die Formulargröße kannst du standardmäßig nicht ändern. Es gibt aber einen Trick. Dazu gibt es schon einen Thread. Das klappt ganz gut.

Insgesamt muss man schon den ein oder anderen Klimmzug machen um das gewünschte mit VBA zu machen. Als Zwischenweg zum Umstieg auf .Net wäre die Formulare mit deinem Programmcode in VB6 als ActiveX Dll zu erzeugen und diese dann in VBA einzubinden. Dazu bräuchtest du aber den Compiler und es ist auch zunächst ein wenig aufwendiger.

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

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 12. Mrz. 2009 21:34    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


beispiel.zip

 
Hallo Wilfried,

einen etwas verpätetetes Dankeschön für die wertvollen 2 Tipps.

zu 1. ich hatte es schon mit Me.ListView1.HideSelection = True
versucht, aber da hatte ich einen Denkfehler.

zu 2. Der Thread ist ja ganz hervorragend, das so viele Klimmzüge nötig sind für diese Funktion ist überraschend. Zwar funktioniert das
Größenverändern des Formulares nur solange, wie man das Listview-Feld mit der Maus nicht berührt, aber das zu programmieren ist zu aufwendig. In der VBA -Hilfe steht zwar,das jedes Formular mit einem
Minimier- und Maxinmier-Button versehen ist, was aber leider nicht der Fall ist.

---------------------------------------------------------------------
Im Zuge der Anwendung meines Formulares muss ich noch eine weiter Funktion einbauen, was ich bisher nicht lösen konnte. Die Attributwerte der Blöcke, die ich in das ListView auslese, sind assziativ über ein Schriftfeld mit je einer Polylinie verknüpft, was ich in Lisp programiert habe. Im Attributwert Fläche steht der Flächeninhalt der verknüpften Polyline. Zu Demonstration habe ich Dir
eine PL mit dem Blockattribut als zip hochgeladen. Mein Problem ist folgendes:
Ich will von meinem Blockattribut den Layernamen der verknüpften Polylinie abfragen. Wie ermittle ich die Polylinie mit der das Attribut verknüpft ist?

Auszug aus meinen  Lisp -Programm zu Genereierung des assziativen Schriftfledes:
(if (= (cdr (assoc 0 (entget hElement))) "LWPOLYLINE")
          (progn
            (setq hObjektID (vla-get-objectid
                            (vlax-ename->vla-object hElement)
                          )
          )
         
         
          (setq htext (strcat
                        "%<\\AcObjProp Object(%<\\_ObjId "
                        (rtos hObjektID 2 0)
                      ">%).Area \\f \"%lu2%ds44>% m²" )
          )
          (setq txt_flaech htext)
         
          )
        (progn
          (princ "\nEs wurde keine Polylinie ausgewählt")
        ); end progn
      )
;.....
;....
(command "-einfüge" "Flächenstempel"  pb "" "" ""  txt_id txt_bez txt_belag txt_flaech "N")

Anhand des Attributwertes Flächenbezeichnung kann ich überprüfen, ob der Layername der verknüpften PL richtig ist, und so könnte ich den Layeranmen in eine neue Spalte meines Listview schreiben, wenn ich,
wie schon gesagt, die dazugehörende Pl ermittlen könnte.

Vielleicht hast Du dazu eine Idee?


Danke im vorraus für Deine Mühen


Gruß Volker

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 13. Mrz. 2009 11:00    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 steinemann09 10 Unities + Antwort hilfreich

Hallo Volker,

wenn du die Objekt ID im Blockattribut gespeichert hast kannst du auch wieder zum Objekt kommen.

Code:

    Dim tempObj As AcadObject
    Set tempObj = ThisDrawing.ObjectIdToObject(objectID)
    debug.print tempObj.Layer

Ich verwende dazu allerdings den HANDLE eines Objektes um die Referenz eines Objektes extern zu speichern. Da geht es genauso.
Code:
RetVal = object.HandleToObject(Handle)

Ich dachte allerdings bisher das das Handle für ein Objekt immer erhalten bleibt und die ObjectID je Sitzung gilt. 
Lasse mich da aber gerne eines besseren belehren.

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

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 14. Mrz. 2009 20:59    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,

danke für Deinen Tipp, diese Zuweisung war war mir ja schon soweit klar, aber ich wollte ja nicht den Layernamen des Blockattributes ermitteln, wie in Deinen Beispiel beschrieben  z.B
oi = Attributes(3).ObjectID '(ObjektiD des 
                            '3.Attrinutwertes[Flächeninhalt] des 
                            ' Attributes Flächenstempel)
Set tempObj = ThisDrawing.ObjectIdToObject(objectID) ' Objektreferenz
                                                    ' des Blockes
debug.print tempObj.Layer  ' gibt desn Layernamen des Blockes   
                          '"A_Flaechenstempel_Vermdok" zurück

Der Attributwert Flächeninhalt ("104,678 m²") ist ja über das Schriftfeld mit der entspechenden Polyinie verknüpft, z.B. mit "A_bef.Fläche",dessen FLächengröße ja assoziativ über das Schriftfeld in das Attribut geschrieben wird. Ich will aber den Layernamen der Polylinie ermitteln, nicht den Layernamen des Blockes.

Ich versuche weiter es zu lösen, trotzdem wäre ich sehr an einem weiteren Tipp von Dir interssiert.


Gruß Volker

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 15. Mrz. 2009 13:18    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 steinemann09 10 Unities + Antwort hilfreich

Hallo Volker,

hast du nicht in deinem Attribut "FLAECHEN-ID" den Wert der Polylinie ?

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

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 15. Mrz. 2009 13:53    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 steinemann09 10 Unities + Antwort hilfreich

Hallo Volker,

hab gesehen das du nicht die Flächen ID speicherst. Dann sollest du das in einem weiteren Attribut machen. Auf die ObjectID aus der Felddefinition kannst du IMHO nicht mehr zugreifen. Das entsprechende Attribut hat zwar noch ein ExtensionDictionary aus dem hervorgeht das es sich um ein Feld handelt, aber die Definition kann man nicht auslesen.

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

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 15. Mrz. 2009 22:18    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,

es scheint ein kleines Verständigungsproblem vorzuliegen. Wahrscheinlich bin ich nicht richtig in der Lage in kurzen Worten zu schildern, was für ein Problem ich habe.
Also, wie Du in der Beispielzeichnung sehen kannst, ist mein Blockatrribut mit 5 Werten versehen. Der erste Wert FLAECHEN-ID ist aber nicht mit der Polylinie verknüpft, sondern mit eine Text(nummerreiert die PL's durch), was aber nicht von Interesse ist. Der 4. Attributwert ist der Fächeninhalt, welcher über ein Schriftfeld assoziativ mit einer geschlossenen Polylinie verknüpft ist. Somit kann ich nur über den Attributwert Flächeninhalt die dazugehörige Polylinie ermitteln, was mir leider nicht gelingt;

weder über tempOb.getXdata oder
über tempOb.OwnerID komme ich an die verknüpfte  Polylinie heran.

In meiner vorigen Antwort wa ein Schreibfehler:
Set tempObj = ThisDrawing.ObjectIdToObject(oi) ' Objektreferenz
                                                    ' des Blockes

P.S über die ObjectId komme ich doch nur an das Blockattribut heran, bzw. den Block heran, aber nicht an Verknüpfungen(nicht korrekte Bezeichnung)

Gruß Volker

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 16. Mrz. 2009 10:48    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 steinemann09 10 Unities + Antwort hilfreich

Hallo Volker,
 
Zitat:
es scheint ein kleines Verständigungsproblem vorzuliegen
glaube ich auch ;)
Deshalb noch mal die Interpretation.
 
Zitat:
hab gesehen das du nicht die Flächen ID speicherst.

gemeint war die ObjektID bzw. das Handle der Polylinie.
 
Zitat:
Dann sollest du das in einem weiteren Attribut machen. Auf die ObjectID aus der Felddefinition kannst du IMHO nicht mehr zugreifen. Das entsprechende Attribut hat zwar noch ein ExtensionDictionary aus dem hervorgeht das es sich um ein Feld handelt, aber die Definition kann man nicht auslesen

Du solltest deinen Block um ein Attribut erweitern in das du die ObjektID bzw. das Handle der Polylinie speicherst. Die kannst du doch als weiteren Parameter (hObjektID)in deinem Lisp übergeben.

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

steinemann09
Mitglied
Dipl. Ing.


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

Beiträge: 47
Registriert: 27.08.2008

AutoCAD 2005, AutoCAD 2011

erstellt am: 16. Mrz. 2009 15:41    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


schriftfeld.jpg

 
Halllo Wilfried,

danke für Deinen Asatz, damit würde es problemlos funktionieren,
aber ich darf dem Flächenstempel - Block leider kein weiters Attribut zuordnen(Vorgabe des AG). Ich hoffe, ich nerve Dich nicht zusehr.

Ich will ja Dein Motto, "warum Lispeln, wenns auch anders geht" nicht in Frage stellen, aber ich gebe Dir trozdem einen kleinen Besipielcode, wie ich in Lisp aus dem Blockattribut zu der über das Schriftfeld verknüpften Polylinie gelange.

___________________________________________________________________

(setq d1 (entget (car(nentsel "\nAttribut wählen: "))))
(setq d1_0  (cdr (assoc 0 d1)))
(setq dn d1) 
  (while (/= d1_0  "SEQEND")   
      (setq dn (cdr (assoc -1 dn)))
      (setq dn (entget (entnext dn)))
      (setq d1_0  (cdr (assoc 0 dn)))
    )

 
(setq da (entget (cdr (assoc -2 dn))))
(setq ptr (cdr (assoc -1 da)))
(setq e1 (entnext ptr))
(setq ed (entget e1)) ; Elementdaten-FlächenID
(setq e2 (entnext e1))        ;Gibt den Namen des Elements zurck
(setq ed2 (entget e2)) ; Elementdaten-Flächenbezeichnung
(setq e3 (entnext e2))        ;Gibt den Namen des Elements zurck
(setq ed3 (entget e3)) ; Elementdaten-Flächenbelag
(setq e4 (entnext e3))        ;Gibt den Namen des Elements zurck
(setq ed4 (entget e4)) ; Elementdaten-Flächenbelag
(setq d1 ed4) 
(if (/=  (assoc 360 d1) nil)
    (progn
      (setq d2 (entget (cdr(assoc 360 d1))))
      (setq d3 (entget (cdr(assoc 360 d2))))
      (setq d4 (entget (cdr (assoc 360 d3))))
      (setq d5 (entget (cdr (assoc 360 d4))))
      (setq d5a (cdr (assoc 331 d5)))
      (setq d5b (cdr (assoc 301 d5)))
      (setq ed5b_ss (substr d5b 1 1))
          (if  (= ed5b_ss "#")
            (progn
              (princ "\nkeine Verknüpfung zu einer Polylinie")
              (id_pruef d1)
            )
          )
      (redraw d5a 3)
      (Princ "\nPolylinie wird ausgeleuchtet")
    )
    (progn
        (princ "\nkeine Verknüpfung zu einer Polylinie")
        (id_pruef d1)
    )
)

_____________________________________________________________________

Etwas umständlich, aber es funktioniert. Warum soll das gleiche in VB
nicht funktionieren?
Ich habe Dir noch ein Screenshot gemacht, mit dem Eigenschaftsfenster
vom Schriftfeld des Attibutwertes Flächeninhalt. Dort ist ja auch die Object-Id der Polylinie ablesbar. Ich habe zwar auch schon etwas über Schriftfelder im Forum gelesen, konnte es leider für meine Belange nicht verwenden.
Komme ich nicht darum herum von VB aus Lisp aufzurufen, um die Objekt-ID der PL zu bestimmen. Geht das so ohneweiters?

Gruß Volker

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 16. Mrz. 2009 16:07    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 steinemann09 10 Unities + Antwort hilfreich

Hallo Volker,

Zitat:
Warum soll das gleiche in VB nicht funktionieren?

Keine Ahnung. 
Vielleicht hat ja noch jemand anderer eine Idee.

Ein Würgaround wäre dein Lisp etwas umzubauen so das die ID z.B. in die Systemvarible USERS1 geschrieben wird.
Diese Lisp rufst du per Sendcommand aus VB auf und liest dann den Inhalt mit thisdrawing.GetVariable ("USERS1") wieder aus.
Ich würde es halt mit dem Zusatzattribut (unsichtbar) machen.

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)2023 CAD.de | Impressum | Datenschutz