martes, 18 de agosto de 2009

Control de MS Excel des de Delphi

Després de molt de temps, us faig una petita introducció al control de fulles excel des d'un programa realitzat en Delphi. El primer que hem de fer per controlar l'aplicació MSExcel es incorporar el servidor dins del nostre IDE.
Per a fer-ho, primer hem de importar els components de l'office. Anem a Component -> Import Components... i s'ens obre la següent pantalla







Un cop seleccionem aquesta opció, escollim per importar l'opció Import Type Library i escollim per importar Excel, Office i el motor office.














Un cop tenim seleccionades les dues llibreries de components, li hem de dir a al IDE com les volem utilitzar. Això ho fem a partir de la pantalla de component.















Amb aquesta pantalla creem el Wrappers i els afegim al nostre projecte. Ara solament quedarà fer-lose servir.

Utitlització
En una pantalla nova afegim un dels components nous que ens han aparegut en la paleta d'eines. El component ha de ser de la classe TExcelApplication. Un cop afegit el component, ens han d'apareixer els uses Excel_TLB i Office_TLB, que son els wrappers que ens permetran la funcionalitat.
Ara ja podem començar a treballar amb el control excel. Primer inicialitzarem el component:

XLApp1 := Excel_TLB.TExcelApplication.Create(self);


no hem d'oblidar-nos de desconectar el component:
XLApp1.Quit;
XLApp1.Disconnect;


Per obrir un excel i connectar-nos a ell, solament hem de fer connect i fer-lo visible.

XLApp1.Connect;
// Podem instal·lar nous components, programats per nosaltres.
obj := 'ExcelAddIn1';
XLApp1.COMAddIns.Item(obj).Connect := true;
XLApp1.OnWorkbookBeforeSave := XLAppWorkbookBeforeSave;
XLApp1.OnNewWorkbook := XLAppNewWorkbook;
XLApp1.Visible[GetUserDefaultLCID] := True;


Com es pot veure, també podem capturar una sèrie d'events. En el nostre cas, abans de guardar i quan l'usuari vol fer un nou full. D'aquesta forma podem controlar on es guarden els fulls i quin es el format al que volem que treballin.

Si volem obrir una nova fulla ho podrem fer com es mostra a l'exemple

procedure NouExcel;
var
objXLS: Excel_TLB.TExcelWorkbook;
objSheet: Excel_TLB.TExcelWorksheet;
begin
newWorkbook := XLApp1.Workbooks.Add('C:\Temp\Auxiliar.xlt', GetUserDefaultLCID);
objXLS := Excel_TLB.TExcelWorkbook.Create(nil);
objXLS.ConnectTo(newWorkbook);
objSheet := Excel_TLB.TExcelWorksheet.Create(nil);
objSheet.ConnectTo(objXLS.Worksheets['Xarxa'] as _Worksheet);

objSheet.Cells.Item[1, 2] := 'proves 1';
objSheet.Range[objSheet.Cells.Item[2, 2], objSheet.Cells.Item[2, 2]].NumberFormat := '@';
objSheet.Cells.Item[2, 2] := 'Valor defecte';
end;

De moment això es tot.

miércoles, 5 de noviembre de 2008

Freemem de BookMark

S'ha de tenir en compte que quan es treballa amb un TADOQuery i es vol fer servir un bookmark, si fem servir el mètode getBookMark s'ha d'alliberar la memòria. Això es degut a que getBookMark reserva un espai de memòria per guardar el punter.

function TDataSet.GetBookmark: TBookmark;
begin
if BookmarkAvailable then
begin
GetMem(Result, FBookmarkSize);
GetBookmarkData(ActiveBuffer, Result);
end else
Result := nil;
end;

Per tant s'hauria d'alliberar la memòria en aquests casos. Per a fer-ho tenim el mètode FreeBookMark(Bookmark: TBookmark). Que allibera el punter bookmark.

Codi d'exemple:

// Guardem on tenim situat el cursor actualment en el QDiari
QDiariBookmark := QDiari.GetBookmark;
try
..... Aquí podem afegir qualsevol codi
finally
QDiari.FreeBookmark(QDiariBookmark);
end;

lunes, 13 de octubre de 2008

jueves, 9 de octubre de 2008

Refresh d'un TADOQuery

En un TADOQuery no es pot fer un refresh, ja que està pensat per a treballar amb tres capes (datasnap). Fins ara el que feiem era obrir i tancar el query per refrescar-lo. He trobat i provat el següent codi i realment refresca el query sense la necessitat d'executar la consulta i enviar tots els missatges de nou. El codi que fa això es:

procedure Refresh(ds: TADOCustomDataSet)
var
book: TBookMark;
begin
book := ds.GetBookmark;
try
ds.Requery;
ds.GotoBookmark(book);
finally
ds.FreeBookmark(book);
end;
end;

viernes, 3 de octubre de 2008

Crear Documentació i Diagrames des del Model View de Delphi

Per crear la documentació del model UML i la generació de l'ajuda de programador a l'estil JavaDoc, hem de fer:


Ens apareixerà un diagrama amb les nostres classes:


Fent doble-click sobre aquesta, podem obrir el diagrama UML:


Un cop a sobre el model, podem fer botó dret per desplegar el menú contextual:



Generem la documentació a la ruta indicada:



Un cop generada tota la documentació, podem accedir a la informació mitjançant l'index.html que apareixerà dins la ruta de generació de documentació.