Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Block bearbeiten verbieten...

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: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
Autor Thema:  Block bearbeiten verbieten... (1623 mal gelesen)
Heiko76
Mitglied
Applikationsingenieur


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

Beiträge: 589
Registriert: 21.03.2002

Win10 64bit
Autodesk Produkte 2018
VB.net / Powershell

erstellt am: 09. Sep. 2003 11:02    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


Handle_BlockModification.zip

 
Hallo zusammen,

ich habe dieses Beispiel bekommen, aber irgendwie macht es nicht das was mir versprochen wurde. Es sollte eigendlich eine MSGBox aufrufen mit dem Text:

"Fingerweg von Bloecken"

Aber das tut es nicht. Was muß ich hierbei noch machen???

------------------

cu
Heiko

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

BerndE
Mitglied
Hochbautechniker


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

Beiträge: 557
Registriert: 05.07.2003

erstellt am: 09. Sep. 2003 11:58    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 Heiko76 10 Unities + Antwort hilfreich


meinVorschlag.zip

 
Hi Heiko,
hab mir dein dvb mal angeschaut. das event modified tritt erst ein, wenn du tatsächlich ein veränderung auslöst. das reine anklicken eines objektes mit getentity erfüllt dies m.e. noch nicht. willst du aber direkt nach anklicken des objektes eine meldung erzeugen, wie wäre es dann mit einer If..then-zeile (siehe anhang)

------------------

Bernd

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

Heiko76
Mitglied
Applikationsingenieur


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

Beiträge: 589
Registriert: 21.03.2002

Win10 64bit
Autodesk Produkte 2018
VB.net / Powershell

erstellt am: 09. Sep. 2003 12:06    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 Bernd,

das sieht schon richtig gut aus. Das mit dem Beenden des Befehls hab ich auch gerade gesehen. Das ist nicht das, was ich haben will, da hast Du recht. Ich habe hier einen Event gefunden, der ist auch ganz gut:

Private Sub AcadDocument_BeginCommand(CommandName)
    MsgBox "Nein"
End Sub

Nur wie kriege ich jetzt da bei CommandName einen Befehl rein? Ich möchte den Befehl _.eattedit abfangen? Am besten, wenn er bei einem bestimmten Block angewendet wird.

------------------

cu
Heiko

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

BerndE
Mitglied
Hochbautechniker


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

Beiträge: 557
Registriert: 05.07.2003

erstellt am: 09. Sep. 2003 12: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 Heiko76 10 Unities + Antwort hilfreich

Hi Heiko,
wenn du eine bearbeitung der Blöcke gänzlich unmöglich machen willst,
dann trag im aktuellen projekt unter thisdrawing ein:

Public WithEvents Object As AcadBlockReference
Private Sub AcadDocument_ObjectModified(ByVal Object As Object)
    MsgBox "Finger weg von Bloecken"
    ThisDrawing.SendCommand "z" & vbCr
End Sub

allerdings ist es dann auch aus mit dem einfügen von blöcken, weil das einfügen eines blockes eine veränderung der blockreference ist.

------------------

Bernd

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

BerndE
Mitglied
Hochbautechniker


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

Beiträge: 557
Registriert: 05.07.2003

Revit 2013
ACA 2012 deutsch
BuildingOne 5.4.5
Win7
WindowsNetz

erstellt am: 09. Sep. 2003 12:20    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 Heiko76 10 Unities + Antwort hilfreich

Upps..hab gerade bemerkt, das bei meinem letzten befehl irgend nen cleverling kurzerhand zlösch benutzen muss, um den block dann doch zu ändern

------------------

Bernd

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

Heiko76
Mitglied
Applikationsingenieur


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

Beiträge: 589
Registriert: 21.03.2002

erstellt am: 11. Sep. 2003 12:06    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

Hi Bernd,

das ist ja gerade das Problem. Ich habe ein VBA Programm geschrieben, womit man das Schriftfeld ausfüllen muss. Dieses Programm ist mit einer SQL-Datenbank verbunden von der dann automatisch eine neue Zeichnungsnummer vergeben wird. In der Datenbank sind auch die ganzen Felder, die im Schriffeld stehen hinterlegt. Also in etwa ein EDM System (zumindest mal in die Richtung). Nun muß ich aber verhindern, das ein User das Schriftfeld "von Hand" ändert, d.H. ohne mein Programm darf das Schriftfeld nicht bearbeitet werden. Das hätte zur Folge, das im Schriftfeld andere Werte stehen als in der Datenbank.
Dafür suche ich jetzt eine Sinnvolle Lösung, wie ich dies verhindern kann...

------------------

cu
Heiko

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

BerndE
Mitglied
Hochbautechniker


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

Beiträge: 557
Registriert: 05.07.2003

Revit 2013
ACA 2012 deutsch
BuildingOne 5.4.5
Win7
WindowsNetz

erstellt am: 11. Sep. 2003 13:56    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 Heiko76 10 Unities + Antwort hilfreich

hi heiko,
schau dir doch mal die seite http://ww3.cad.de/foren/ubb/Forum54/HTML/002353.shtml
an. Da besonders den Beitrag von Bernd Cuder. Proxys, die du erstellen kannst und kein anderer ändern kann...das müßte doch nen lösungsansatz sein. hört sich zumindest ganz interessant an.

------------------

Bernd

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

Brischke
Ehrenmitglied V.I.P. h.c.
CAD on demand GmbH



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

Beiträge: 4189
Registriert: 17.05.2001

ACAD20XX, defun-tools

erstellt am: 12. Sep. 2003 08:40    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 Heiko76 10 Unities + Antwort hilfreich

Hallo Heiko,

ich weiß ja nicht, wie fit Deine Anwender sind. Man kann aber auch einzelne Befehle löschen.
Mit AutoLISP geht das so
(command "_UNDEFINE" "BEFNAME")
Nachteil, dieser Befel steht dann auch nicht bei den Blöcken zur Verfügung, die geändert werden dürfen.

2. Variante, die ich eigentlich noch besser finden würde. Wenn Das Attribut sowieso nur einmal ausgefüllt werden darf, dann mach doch einfach ein Konstantes Attribut daraus. Sowohl mit VBA als auch AutoLISP ist das ja kein Thema, auch das auszuwerten.

Das wären mal 2 andere Ansätze, mit denen du dein Ziel erreichen könntest.

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
CADlon - Lisp over night!
10 - Der Countdown läuft. Wofür?... ./.
Ich bin vom 07.-10.10. in Stuttgart dabei.

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

Heiko76
Mitglied
Applikationsingenieur


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

Beiträge: 589
Registriert: 21.03.2002

erstellt am: 12. Sep. 2003 09:35    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

Hi Holger,

danke für die 2 Varianten. Das mit dem Befehl deaktivieren kannte ich noch nicht. Ist mal interresant zu wissen, aber es müssen noch andere Blöcke geändert werden. Mit den konstanten Attributen, ist nicht so toll, da die User die möglichkeit haben müssen, diese Werte nochmals zu ändern oder zu ergänzen.
Ist es möglich, beim start des VBA Programmes die Attribute nicht mehr konstant zu schalten und beim Beenden wieder konstant?

------------------

cu
Heiko

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

RoSiNiNo
Mitglied
Konstrukteur


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

Beiträge: 1126
Registriert: 09.10.2002

Acad 2011-deutsch, Express Tools
3ds Max 2010
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 18. Sep. 2003 19: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 Nur für Heiko76 10 Unities + Antwort hilfreich

Eine Frage dazu. Geht es dir nur um das Abfangen des Befehls "_.eattedit "?
Verrschieben, drehen, etc. kann ruhig möglich sein?

Was möchtest du das passiert wenn jemand die Attribute ändern möchte, soll vielleicht dein VBA-Programm zum ändern der Attribute aufgerufen werden?

Wie heißt den dein Block der nicht angegriffen werden darf?

------------------
Roland

[Diese Nachricht wurde von RoSiNiNo am 18. September 2003 editiert.]

[Diese Nachricht wurde von RoSiNiNo am 18. September 2003 editiert.]

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

Heiko76
Mitglied
Applikationsingenieur


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

Beiträge: 589
Registriert: 21.03.2002

erstellt am: 22. Sep. 2003 07:06    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

Hi Roland,

als erstes, es geht mir eigendlich grundsätzlich um das bearbeiten des Blockes (Schriftfeldes), d.H. z.B. mit _eattedit oder _ddatte.

Das starten des VBA-Programmes hört sich ganz gut an. Ich wollte eigendlich nur eine MSGBOX haben, aber das ist noch besser.

Es sind eigendlich 2 Blöcke die nicht angegriffen werden dürfen. Die heißen "SFeld2000" und "2SFeld2000".

------------------

cu
Heiko

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

RoSiNiNo
Mitglied
Konstrukteur


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

Beiträge: 1126
Registriert: 09.10.2002

Acad 2011-deutsch, Express Tools
3ds Max 2010
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 24. Sep. 2003 08: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 Heiko76 10 Unities + Antwort hilfreich

Ich hab jetzt ein wenig herumgefragt, hier ist die Lösung für dein Problem. Du solltest sie allerdings noch ein wenig Testen.
Code:
Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)

    Select Case CommandName
        Case "REFEDIT", "ATTEDIT", "EATTEDIT"
            Dim selectionSetObject As AcadSelectionSet
            Dim oBlock As AcadBlockReference
            Dim Var As Variant
            On Error Resume Next
            If ThisDrawing.SelectionSets("SSet1") Then
              ThisDrawing.SelectionSets("SSet1").Delete
            End If
            Set selectionSetObject = ThisDrawing.SelectionSets.Add("SSet1")
            selectionSetObject.Select acSelectionSetLast
            Set oBlock = selectionSetObject.Item(0)
            If oBlock.Name = "SFeld2000" Then SendKeys "{ESC}"
            ThisDrawing.SelectionSets("SSet1").Delete
    End Select

End Sub



Natürlich mußt du den Code an deine Bedürfnisse anpassen, hier kannst du auch die Prozedur die du brauchst starten und den Block bearbeiten.

------------------
Roland

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

Heiko76
Mitglied
Applikationsingenieur


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

Beiträge: 589
Registriert: 21.03.2002

erstellt am: 24. Sep. 2003 08:17    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

Guten morgen Roland,

danke für den Code, den werd ich direkt heute Nachmittag mal ausprobieren und Dir bescheid geben.

------------------

cu
Heiko

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