terça-feira, 23 de janeiro de 2007

Evoluindo o Programa de Impressão

                          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 assim
  Type          
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;

Nenhum comentário:

Postar um comentário

 
BlogBlogs.Com.Br