Delphi Automação OLE - Pate II
Construi esses exemplos a partir de uma experiência no trabalho. Certa vez,
o lider da equipe entra na sala bem nervoso, semi-desesperado, pedidinod que nós
interronpessemos o que estavamos fazendo por conta de uma situação administrativa.
Toda a documentação de um sistema gigante deveria ser impressa. Não havia, é claro
profissionais específicamente designados para tal tarefa, ou pelo menos não o
sufiente. Portanto, toda a fabrica de software estaria convocada a imprimir toda
documentação. Fui rememetido as profundesas do meu pensamento, indignado,
ainda indeciso sobre como responderia a essa situação, quando o Daniel,
compartinhando da mesma indignação sugeriu que fosse codificado um programa tal
realizar tal tarefa ...
(continua nos próximos post - O desafio ... tchan tchan tchan!!)
1) Inicie uma applicação no Delphi
No menu principal selecione: File - New - Application
2) Adicione no Form1 os seguintes componentes, seguindo exatamente a ordem abaixo,
e configure suas respectivas propriedades conform listado:
I Panel (Palheta Standard):
BevelOuter = bvNone
Name = PnlTreeView
Align = alLeft
II Splitter(Palheta Additional):
Name = Splitter1
Beveled = True
Align = alLeft
III Panel (Palheta Standard):
Name = PnlListView
BevelOuter = bvNone
Align = alLeft
IV Splitter(Palheta Additional):
Name = Splitter2
Beveled = True
Align = alLeft
V PopUpMenu(Palheta Standard):
Name = PopupMenu
Com o botão direito do mouse no PopupMenu selecione Menu Designer.
Adicione os Seguntes Itens de menu:
- Imprimir Todos
- Imprimir Selecionados
- Excluir Todos
- Excluir Selecionados
VI Panel (Palheta Standard):
Name = PnlLstFile
BevelOuter = bvNone
Align = alClient
VII FileListBox(Palheta Win3.1)
Coloque o FileListBox no PnlLstFile
Name = LstFile
PopupMenu = PopupMenu //Para associar o PopupMenu ao LstFile
Align = alClient
VIII ShellTreeView (Palheta Samples):
Coloque o ShelTreeView no PnlTreeView
Name = ShellTreeView
Align = alClient
XIII ShellListView (Palheta Samples):
Coloque o ShelTreeView no PnlListView
Name = ShellListView
Align = alClient
IX WordApplication (Palheta Servers):
X WordDocument (Palheta Servers):
XI ExcelWorkbook (Palheta Servers):
XII ExcelApplication (Palheta Servers):
3) Vamos oo Código agora.
A seção Type na unit do Fomr1 deverá estar assimType
TForm1 = class(TForm)
PnlTreeView: TPanel;
PnlListView: TPanel;
Splitter1: TSplitter;
PnlListFile: TPanel;
ShellTreeView1: TShellTreeView;
ShellListView1: TShellListView;
Splitter2: TSplitter;
LstFile: TFileListBox;
PopupMenu: TPopupMenu;
ImprimirTodos1: TMenuItem;
ImprimirSelecionados1: TMenuItem;
N1: TMenuItem;
ExcluirTodos1: TMenuItem;
ExcluirSelecionados1: TMenuItem;
WordApplication1: TWordApplication;
WordDocument1: TWordDocument;
ExcelWorkbook1: TExcelWorkbook;
ExcelApplication1: TExcelApplication;
private
{ Digite as Funções em vermelho codificadas abaixo,
em seguida pressione "CTRL + SHIFT + C" }
procedure FindFiles(FilesList: TListBox; StartDir,
FileMask: string);
procedure PrintFile(SelectedOnly: Boolean = False);
public
{ Public declarations }
end;
3.1) Uma função que listará os arquivos que serão impressos - FindFiles
procedure TForm1.FindFiles(FilesList: TListBox; StartDir, FileMask: string);
var
SR: TSearchRec;
DirList: TStringList;
IsFound: Boolean;
i: integer;
begin
if StartDir[length(StartDir)] <> '\' then
StartDir := StartDir + '\';
{ Contruindo a Lista de Diretórios - StartDir}
IsFound :=
FindFirst(StartDir+FileMask, faAnyFile - faDirectory, SR) = 0;
while IsFound do
begin
FilesList.Items.Add(StartDir + SR.Name);
IsFound := FindNext(SR) = 0;
end;
FindClose(SR);
// Contruindo a listagem dos Subdiretórios
DirList := TStringList.Create;
IsFound := FindFirst(StartDir + '*.*', faAnyFile, SR) = 0;
while IsFound do
begin
if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
DirList.Add(StartDir + SR.Name);
IsFound := FindNext(SR) = 0;
end;
FindClose(SR);
for i := 0 to DirList.Count - 1 do
FindFiles(FilesList, DirList[i], FileMask);
DirList.Free;
end;
3.2) Codificando o evento OnClick do item do menu Popup "Excluir Selecionados"
procedure TForm1.ExcluirSelecionados1Click(Sender: TObject);
begin
LstFile.DeleteSelected;
end;
3.3) Codificando o evento OnClick do item do menu Popup "Excluir Selecionados"
procedure TForm1.PrintFile(SelectedOnly: Boolean);
const
LCID: DWORD = LOCALE_SYSTEM_DEFAULT;
var
i: Integer;
MyDoc: _Document;
MyExel: _Workbook;
MyPath: String;
MyArq, ASave, AReadOnly: OleVariant;
Printed: Boolean;
StatusImpressora: TWMSpoolerStatus;
begin
Printed := False;
Asave := False;
AReadOnly := True;
(* A função IncludeTrailingPathDelimiter garante no final do path name a presensa do "\" *)
MyPath := IncludeTrailingPathDelimiter(ShellTreeView1.Path);
for i := 0 to Pred(LstFile.Items.Count) do
begin
if (SelectedOnly and LstFile.Selected[i]) xor not(SelectedOnly) then
begin
MyArq := MyPath + LstFile.Items[i];
if (pos(UpperCase('.doc'), UpperCase(LstFile.Items[i])) > 0) then
begin
MyDoc := WordApplication1.Documents.Open(MyArq, EmptyParam,
AReadOnly, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam);
WordDocument1.ConnectTo(MyDoc);
WordDocument1.Activate;
WordDocument1.PrintOut;
WordApplication1.Disconnect;
WordDocument1.Close(ASave);
WordDocument1.Disconnect;
Self.Caption := MyArq;
end
else if pos(UpperCase('.xls'), UpperCase(LstFile.Items[i])) > 0 then
begin
MyExel := ExcelApplication1.Workbooks.Open(MyArq , EmptyParam,
AReadOnly, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, LCID);
ExcelWorkbook1.ConnectTo(MyExel);
ExcelWorkbook1.Activate;
ExcelWorkbook1.PrintOut;
ExcelWorkbook1.Close(ASave);
ExcelWorkbook1.Disconnect;
Self.Caption := MyArq;
end;
end;
end;
end;
3.5) Codificando o evento OnClick do item do menu Popup "Excluir Todos"
procedure TForm1.ExcluirTodos1Click(Sender: TObject);
begin
LstFile.Clear;
end;
3.6) Codificando o evento OnClick do item do menu Popup "Imprimir Selecionados"
procedure TForm1.ImprimirSelecionados1Click(Sender: TObject);
begin
PrintFile(True);
end;
3.7) Codificando o evento OnClick do item do menu Popup "Imprimir Todos"
procedure TForm1.ImprimirTodos1Click(Sender: TObject);
begin
PrintFile;
end;
3.8) Codificando o evento OnChange do ShellTreeView1 - " ShellTreeView1Change "
procedure TForm1.ShellTreeView1Change(Sender: TObject; Node: TTreeNode);
begin
if (ShellListView1.ShellTreeView.Path = '') or
(Pos(':\', ShellListView1.ShellTreeView.Path) = 0) then Exit;
LstFile.Directory := ShellListView1.ShellTreeView.Path;
end;
3.9) Codificando o evento OnClick do item do menu Popup "Imprimir Todos"
procedure TForm1.ImprimirTodos1Click(Sender: TObject);
begin
PrintFile;
end;
Estamos estudando e o resultado disso postamos aqui. Sinceramente desejamos que o conteúdo aqui semeado possa ser útil para muitas pessoas.
Seja bem-vindo e fique à vontade para contribuir da forma que puder e quiser.
Bola pra frente ... :)
Nenhum comentário:
Postar um comentário