Newsgroup: it.comp.lang.delphi
Titolo: controllo eventi applicazioni con ActiveX

per esigenze pratiche (l'utente non inserira' mai a mano nel db il nome 
del file) devo controllare l'evento di un programma esterno, di cui non
conosco la struttura.
 
quindi da delphi tramite OLE devo far partire il programma esterno per
poterne intercettare un'evento.
 
AutoCad R14 - quando fanno salva devo intercettare l'evento, per poi
scrive nel db nome del file e path.
 
il motivo ? , semplice da un'altro uffico interrogando il db e sapranno
dove si trova un certo file (DWG, DXF).
 
ho trovato degli esempi ma ci sono 2 problemi:
 
- 1 - richiede un server COM registrato, ma cosi' il controllo degli
       eventi avviene nel server COM e non nell'applicativo
- 2 - esempi rivolti ad OpenOffice dove sono noti i modi di
       interfacciamento
 
serviceManager:= CreateOleObject('com.sun.star.ServiceManager');
desktop:= serviceManager.createInstance('com.sun.star.frame.Desktop');
 
document:= desktop.getCurrentComponent;
 
se invece non conosco come comunicare con il software come faccio a
creare un TLB generico che risponda agli eventi senza creare un server COM ?
 
importo una Type Library COM+ Ser4vice Type Library e aggiungo eventi ?
 
esistono componenti di terze parti ?
 
 
sto usando Delphi XE
 
Maurizio
 
^^^^^
 
ho trovato un'esempio OLE che dichiarano
 
uses ComObj, ActiveX, AxCtrls, Classes, oooEvents_TLB, StdVcl;
 
nella oooEvents_TLB e' presente
 
// *********************************************************************//
// Interface: IListener
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {9810785B-C98F-4ECD-A38C-DABF8248B9BA}
// *********************************************************************//
   IListener = interface(IDispatch)
     ['{9810785B-C98F-4ECD-A38C-DABF8248B9BA}']
     procedure disposing; safecall;
     procedure notifyEvent(const event: IDispatch); safecall;
   end;
 
in altra unit che usa la oooEvents_TLB
 
procedure notifyEvent(const event: IDispatch); safecall;
 
 
procedure TListener.notifyEvent(const event: IDispatch);
var e: OleVariant;
     sNomeFile, dispDir: string;
     Flicker: OleVariant;
     FilePath : string;
begin
   e:= event;
   form1.Memo1.Lines.Add('Event: '+ e.EventName);
end;
 

 importo una Type Library COM+ Ser4vice Type Library e aggiungo eventi ?
Tu non crei un COM.
Tu crei un DESCRITTORE, la type library,  che usi per dialogare con il
COM che e' prodotto da Autodesk o al team di OpenOffice. Ergo, puoi
anche aggiungere degli eventi per TE, ma autocad o openoffice sti
eventi non sapranno mai che esistono, salvo ovviamenge che i loro COM
non espongano qualcosa per registrare delle callback per gli eventi
previsti da loro.
Da come scrivi non sembra tu abbia molto know su queste tecnologie.
A rischio di sembrare noioso, pesante, pedante etc, ti suggerisco di
documentarti bene.
A.

> A.
non sei noioso, etc, e' un mio limite ho sempre detestato COM, OLE.
perche' devo essere io a capire come funziona OpenOffice o Autocad ?
 
es: OpenOffice si devono creare servizi per ServiceManager, poi 
CreReflection, Listener aggiungere eventi, nel callback creare un
riferimento a Flicker per leggere path e nome file;
 
la funzione esposta ritorna string, ma per leggerlo da Variant si deve 
creare array [0, 0] of variant.
 
sto cercando documentazione, ma tra le altre cose si riferisce sempre a 
Delphi prima di Unicode (pre D2009), ma la quasi totalitą degli esempi 
si limita ad aprire, scrivere , salvare sui documenti, ma sulla gestione 
eventi e' dura trovare qualcosa di esplicativo.
 
Maurizio
 
 

 eventi e' dura trovare qualcosa di esplicativo.
Non so se la typelibrary sia in grado di wrappare anche l'evento di 
savetofile. Temo che stai cercando di fare una cosa passando per una 
strada non corretta e che rende questa cosa irrisolvibile: forse 
dovresti cercare di documentarti presso autodesk direttamente.
http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=1911627#section8
sono indicati diversi metodi per interfacciarsi ed espandere autocad.
Inoltre ho visto che ci sono i forum: 
http://forums.autodesk.com/t5/AutoCAD/ct-p/8
dovresti chiedere l� dentro perch� quello � il posto giusto.
Qui
http://tjriley.infogami.com/python_autocad
l'autore del post dice dove si trova la reference guide dell server COM 
di autocad.
-- 
morde
QT 4.7
Delphi (5,6,7.. expired)
Firebird Database

 dovresti chiedere lě dentro perchč quello č il post
 
Scavando noi forum si trova qualcosa:
http://forums.autodesk.com/t5/AutoCAD-R12-R13-R14-Archive/Interfacing-Delphi-to-Autocad-R14/m-p/34923/highlight/true#M17824
 


 perche' devo essere io a capire come funziona OpenOffice o Autocad ?
Qua la questione diventa piu "filosofica".... Nel tuo caso ci sono 3
attori...
La tua app
la tecnologia COM/OLE di windozz
Autocad o OpenOffice
Sulla tua app hai in genere il controllo ela responsabilita'.
OLE e COM sono roba Microsoft e si limitano a esporre un
infrastruttura, se pur scomoda, che ti permette di interagire con
software non scritti da te..Quindi:
non spetta a COM "capire" come funzionano gli altri applicativi..
...e visto che tu tramite OLE altro non fai che usare sti kaz di
programmi, va da se che devi sapere come usarli.
Concordo sul fatto molte interfacce OLE potrebbero essere
migliorate...visto che ho PIANTO davanti a powerpoint......
A.

 migliorate...visto che ho PIANTO davanti a powerpoint......
 
RRRROOOTTTFFL
alby non ho potuto fare a meno di andare su youtube, cercare questa canzone:
http://youtu.be/lkM_O27tSVM
 
e ascoltarla pensando a te.. sopratutto quando dice "And I start to cry, 
each time we meet.." mentre penso a te che apri powerpoint...:-D


 each time we meet.." mentre penso a te che apri powerpoint...:-D
 
 
..ma dico io...
Cont tanti video "interessanti" prp ste cose ti metti a cercaare? :-D
 
A.

 Cont tanti video "interessanti" prp ste cose ti metti a cercaare? :-D
 
WALK ON BY...... YEH YEH YEEEEEEH!
WALK ON BYYYYYYYYY...... YEH YEH YEEEEEEH!
