Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Lisp aus Delphi starten

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:  Lisp aus Delphi starten (1695 mal gelesen)
mundal
Mitglied
Techniker


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

Beiträge: 320
Registriert: 14.02.2005

erstellt am: 13. Mai. 2008 09:24    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 Zusammen,

2 für mich wichtige Fragen:

1.) wie wird ein LISP Programm aus Delphi heraus gestartet.
2.) Wie wird ein AuroCAD-VBA aus Delphi heraus angestossen.

Hat mir jemand Programmbeispiele.

Danke für Eure Hilfe

Joachim

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 13. Mai. 2008 10:45    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 mundal 10 Unities + Antwort hilfreich

Hm. Delphi.
Schwierige Frage. Delphi verwendet meines Wissens nach lediglich die COM-Schnittstelle von Autocad. Da gibts es nicht wirklich viele Möglichkeiten.

Die einzige Möglichkeit die mir einfällt wäre über die SendCommand Methode des Drawing Objektes

in VBA würde es so ausschauen
    ThisDrawing.SendCommand ("(MeineLisp)" & vbCr)

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

Ing. Anton Fuchs
WWW.FFZELL.AT.TC

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

Brischke
Moderator
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: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 13. Mai. 2008 14: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 Nur für mundal 10 Unities + Antwort hilfreich

Hallo Joachim,

es kommt darauf an, was du mit dem Delphi-Code machst.
Willst du einen Script(Batch)lauf über viele Zeichnungen realisieren, dann könnte die Erzeugung einer acaddoc.lsp(im Zeichnungsverzeichnis) helfen. Diese Datei weird automatisch nach dem Öffnen geladen. Wenn in dieser der Lisp-Aufruf steht, startet das Programm also ganz allein.
Den VBA-Code kannst du mit _vbarun starten - im Zweifel auch wieder über SendCommand.

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

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

mundal
Mitglied
Techniker


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

Beiträge: 320
Registriert: 14.02.2005

erstellt am: 13. Mai. 2008 14:25    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 Holger,

Danke für Deine prompte Hilfe.
Kannst Du mir eine Beispieldatei senden?

Ich sollte ein kleines Delphiprogramm haben das sich problemlos
compilieren und starten lässt.

Das Programm soll nur AutoCAD starten, eine Zeichnung laden und in diese Zeichnung einen Kreis mit beliebeigem Radius an beliebigem Punkt zeichnet.

Den Rest bekomme ich dann bestimmt alleine gebacken.

Gruss
Joachim

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

neurosis
Mitglied
dipl.ing.


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

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 15. Mai. 2008 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 mundal 10 Unities + Antwort hilfreich

hallo mundal,
fuer lisp so in der art:

procedure xxx;
var
  path, lsp: string;
  acad: IAcadApplication;
  doc: IAcadDocument;
begin
  path:= ExtractFilePath(Application.ExeName);
  path:= StringReplace(path, '\', '\\', [rfReplaceAll, rfIgnoreCase]);
  lsp:= path + 'lispfile.lsp';

  acad:= GetAcadApplication(True);
  doc:= acad.ActiveDocument;
  doc.SetVariable('CMDECHO', 0); beispiel fuer setzen einer sys-var
  doc.SendCommand(chr(VK_ESCAPE) + chr(VK_ESCAPE) + '(load "' + lsp + '")' + chr(VK_RETURN)); // laden der lisp-datei
  doc.SendCommand('(lispfunc)' + chr(VK_RETURN)); // ausfuehren einer funktion aus der lisp-datei

end;

function GetAcadApplication(start: Boolean): IAcadApplication;
var
  acad: OleVariant;
begin
  Result:= nil;
  try
    acad:= GetActiveOleObject(AcadApp);
    Result:= IDispatch(acad) as IAcadApplication;
  except
    if start then
    begin
      Result:= CoAcadApplication.Create;
      Result.Visible:= True;
    end;
  end;
end;

gruss
marco

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

mundal
Mitglied
Techniker


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

Beiträge: 320
Registriert: 14.02.2005

erstellt am: 15. Mai. 2008 13: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

Klasse + Danke  @Marco,

das war genau das was ich benötigte.

Jetzt komme ich bestimmt gut voran.
!!! Nochmals 1000 x Danke !!!!

Ich hatte in der Programmzeile
  acad:= GetActiveOleObject(AcadApp);
das AcadApp in Acad umgewandelt dann lief das Programm.
Ist das dann soweit ok ?

Falls Du weitere Beispielprogramme von Delphi und AutoCAD hast
dann wäre ich ein dankbarer Abnehmer.


Viele Grüße

Joachim

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

neurosis
Mitglied
dipl.ing.


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

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 15. Mai. 2008 15: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 mundal 10 Unities + Antwort hilfreich

da hab ich doch wirklich eine konstantendeklaration uebersehen

AcadApp = 'AutoCAD.Application.15'; fuer 2000-2002
AcadApp = 'AutoCAD.Application.16'; fuer 2004-2006
AcadApp = 'AutoCAD.Application.17'; fuer 2007-2008

------------------
Marco Heuer
www.arc-aachen.de
Airport Office

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

neurosis
Mitglied
dipl.ing.


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

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 16. Mai. 2008 02:32    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 mundal 10 Unities + Antwort hilfreich

hier noch eine seite mit beispielen fuer delphi / autocad activex: http://www.caddzone.com/delphi/samples.htm

------------------
Marco Heuer
www.arc-aachen.de
Airport Office

[Diese Nachricht wurde von neurosis am 16. Mai. 2008 editiert.]

[Diese Nachricht wurde von neurosis am 16. Mai. 2008 editiert.]

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

HPW
Mitglied
Holz-Techniker


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

Beiträge: 80
Registriert: 11.01.2005

Dell Precision T3610
Autocad 2016

erstellt am: 19. Mai. 2008 09: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 mundal 10 Unities + Antwort hilfreich

Hallo,

Interessante Funktion!
Dazu eine Frage: Was ist wenn es mehrere Autocad-Sitzungen gibt?
Welche wird genommen? Eindeutigkeit?

Ich habe in der Vergangenheit dann über die WIN-API mit dem eindeutigen Fenster-Titel-String mir das Fenster-Handle geholt und per Sendkeys den Lisp-Callback gestartet.
(Fenster-Titel wurde beim Delphi-Start als Kommando-Zeilenparameter übergeben).

------------------
Hans-Peter

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

neurosis
Mitglied
dipl.ing.


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

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 19. Mai. 2008 11: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 mundal 10 Unities + Antwort hilfreich

ich selber verwende delphi nur fuer die konfiguration meiner programme in autocad nach der installation (aufruf einer lisp-datei, um supportpfade zu setzen und menues/toolbars dynamisch zu erzeugen).

ueber die entsprechenden tlb-dateien werden die unterschiedlichen produktzyklen von autocad (2000-2002, 2004-2006, 2007-2008) angesprochen. innerhalb eines zyklus' kommt es drauf an, welche version zuletzt gestartet wurde (d.h. wenn kein autocad offen ist, wird das zuletzt gestartete vom entsprechenden zyklus verwendet -> standardvorgehen dieses code-fragments).
fuer jeden zyklus wuerde man also eine eigene .exe erzeugen. dies laesst sich natuerlich beim kompilieren automatisieren.

wenn du eine bestimmte offene programminstanz (z.b. bei 2 gestarteten autocad2006) ueber eine .exe ansprechen moechtest, wirst du nicht ohne die win-api und das fenster-handle (zu bekommen z.b. [wie beschrieben] ueber angabe des titels) auskommen.

gruss
marco

------------------
Marco Heuer
www.arc-aachen.de
Airport Office

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