DELPHI & AUTOCAD 2007

cs_okido Messages postés 4 Date d'inscription samedi 26 juin 2004 Statut Membre Dernière intervention 31 mai 2006 - 25 mai 2006 à 09:03
cs_davels Messages postés 1 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 20 mars 2008 - 20 mars 2008 à 21:31
Bonjour a tous,

Je me permets de vous demander de l'aide. J’ai trouvé ce petit programme sur le net

ICI : http://www.caddzone.com/delphi/sendcmd.zip

qui permet d'envoyer des commandes à autocad depuis delphi.
Tout fonctionne correctement de la version autocad 14 à 2006, c'est magnifique.
J’ai constaté qu'il ne fonctionne plus sous autocad 2007.
Voila ma question, y aurais-t-il quelqu’un qui puisse m'aider à résoudre ce problème et m'expliquer pourquoi il ne fonctionne plus sous autocad 2007.

Dans l'attende de vos nouvelles je vous souhaite une bonne journée.

10 réponses

Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
25 mai 2006 à 09:21
Salut,

Si cela ne marche pas c'est que chez Autocad ils ont du changer leur code ce qui fait que quand tu veux dire à Autocad par exemple Fermer et bien il ne se ferme pas (à moins de prendre son handle et de lui envoyer cette commande), il faudra toi aussi t'adapter et changer ton code pour qu'Autocad "comprenne" ce que tu lui envoies comme commande.

@+
 Matt

<hr size="2" width="100%" />La paresse est la mère du génie...
0
cs_okido Messages postés 4 Date d'inscription samedi 26 juin 2004 Statut Membre Dernière intervention 31 mai 2006
25 mai 2006 à 10:41
Merci pour ta réponse MATT.

Mais changer le code, ca veut dire quoi ??? qu'es qu'un handle ???

Quelle direction faut-il prendre ???

DDE, OLE, ... Je cherche depuis 2 mois j'ai écris dans plusieurs forum donc celui d'Autodesk, j'ai même écris a l'auteur de ce code ou du moins l'auteur du site sur le quelle je l'ai trouvé "Tony Tanzillo" et il ma répondu qu'il ne le reconnaissait pas. Bref aucune réponse satisfaisante.

J'aime ce code car il ne fait appelle ni "ActiveX"  ni fichier "*.TLB". il est totalement indépendant.

Au plaisir de recevoir d'autre solution.
0
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
26 mai 2006 à 11:33
Juste une apparté sur AutoDesk : à chaque nouvelle revision ou version d'AutoCAD .. il s'amuse à changer des API de leur logiciel. On a déja eut plein de programme à réecrire en bureau d'etude à cause de çà !
0
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
26 mai 2006 à 19:14
@ Okido : en fait il faut que tu trouves ou que tu cherches les codes correspondants à ce que tu veux faire pour que Autocad puisse analyser et interpreter ta commande. Bon courage...

@+
 Matt

<hr size="2" width="100%" />La paresse est la mère du génie...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ahmed12 Messages postés 83 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 9 décembre 2010
27 mai 2006 à 09:11
aotocade maintenent sons run time avec dotnet
0
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
27 mai 2006 à 09:22
eeeeeeeeuh pardon ahmed?!?

<hr size="2" width="100%" />La paresse est la mère du génie...
0
cs_okido Messages postés 4 Date d'inscription samedi 26 juin 2004 Statut Membre Dernière intervention 31 mai 2006
27 mai 2006 à 12:20
En faite je cherche tous simplement a envoyer n'importe quel texte ou chiffre dans la barre de commande d'autocad depuis un bouton delphi.

Si vous avez l'occasion d'essayer le petit programme en question à « http://www.caddzone.com/delphi/sendcmd.zip » avec une version d'autocad antérieur a 2007 vous aller vite comprendre et voir les multiples possibilités que ce programme peut offrir.

BAV. et merci
0
cs_okido Messages postés 4 Date d'inscription samedi 26 juin 2004 Statut Membre Dernière intervention 31 mai 2006
31 mai 2006 à 14:10
Bonjour,

J'ai essayé avec "Sendmessage ()", mais "WM_COPYDATA" n'accepte pas les
UNICODES.

Dans le "PRESSE-PAPIER", je mets le contenu de "Edit1.txt" mais je ne trouve
pas de fonction qui me permet de faire un "PASTE" d'un texte dans un
"HANDLE" de fenêtre.

Je joins les sources du programme et dans l'attente de vos nouvelles
Je vous souhaite une bonne journée.

___________________________________________________________________
unit Unit1;


interface


uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComObj;


type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
  private
    Function SendCommand(Cmd: String) : Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;


implementation


{$R *.DFM}


function TForm1.SendCommand(Cmd: String) : boolean;
var
  cds: TCopyDataStruct;
  wnd, sender : HWND;
  pData : array [0..255] of char;
  Acad : OleVariant;
  Caption : String;
begin;
Acad := GetActiveOleObject('AutoCAD.Application');
Caption := Acad.Caption;


  wnd := FindWindow(Nil, PChar(Caption));
  sender := Application.Handle;
  if wnd <> 0 then
  begin
    StrPCopy(pData, Cmd + #13);
    pData[Length(Cmd)+1] := #0;
    cds.dwData := 1;
    cds.cbData := SizeOf(pData);
    cds.lpData := @pData;
    Result := SendMessage(wnd, WM_COPYDATA, Sender, LParam(@cds)) <> 0;
    SetWindowText(WND,'CA MARCHE');
    //SetActiveWindow(WND);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  If Edit1.Text <> '' then
    SendCommand(Edit1.Text);
end;


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
IF KEY = chr(13) then Button1Click(Edit1);
end;


end.
___________________________________________________________________
0
woolwich Messages postés 6 Date d'inscription dimanche 18 juillet 2004 Statut Membre Dernière intervention 19 mars 2008
19 mars 2008 à 00:16
developpeur..........
0
cs_davels Messages postés 1 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 20 mars 2008
20 mars 2008 à 21:31
En faite, ca fonctionne pas car tu envois du texte a la fenêtre principal de d'AutoCAD.
Le HANDLE de la bar de commande est différent! Soit tu recherches cet HANDLE, soit tu utilises une tout autre méthode qui est beaucoup plus simple!

Lorsque tu ta variable ACAD, tu fais qlq chose du genre ACAD.ActiveDocument.SendCommand('Ta commande').

Voici l'exemple donné par la doc AutoCAD ActiveX programming (fournie d'origine et très bien faite!) en VB :
Sub Example_SendCommand()
   ' This example sends a command for evaluation to the AutoCAD command line
   ' of a particular drawing
  
   ' Create a Circle in the active drawing and
   ' zoom to display the entire circle
   ThisDrawing.SendCommand "_Circle" & vbCr & "2,2,0" & vbCr & "4" & vbCr
   ThisDrawing.SendCommand "_zoom" & vbCr & "a" & vbCr
  
   ' Refresh view
   ThisDrawing.Regen acAllViewports
  
   MsgBox "A circle command has been sent to the command line of the current drawing."
End Sub

ThisDrawing étant l'équivalent de ACAD.ActiveDocument

J'espère que cela t'a aidé.
La différence avec les 2 fonctions : celle que utilises copie un message dans AutoCAD (si tu trouves le HANDLE) tandis qu'avec l'autre, tu demande a AutoCAD d'effecter une commande.
Le SendCommand peut ammener dans certains cas au freeze de ton application jusqu'a ce qu'AutoCAD ne rende la main de mémoire
0
Rejoignez-nous