quarta-feira, 12 de outubro de 2011

Definir o tamanho do papel em TPrinter

Esta procedure configura o tamanho do papel em Run-Time para ser utilizado com o objeto TPrinter; Esta procedure deve ser chamada antes de aplicar o método Printer.BeginDoc.

procedure TForm1.SetPrinterPage(Width, Height : LongInt);
var
  Device : array[0..255] of char;
  Driver : array[0..255] of char;
  Port : array[0..255] of char;
  hDMode : THandle;
  PDMode : PDEVMODE;
begin
  Printer.GetPrinter(Device, Driver, Port, hDMode);
  If hDMode <> 0 then
  begin
  pDMode := GlobalLock( hDMode );
  If pDMode <> nil then
  begin
  pDMode^.dmPaperSize := DMPAPER_USER;
  pDMode^.dmPaperWidth := Width;
  pDMode^.dmPaperLength := Height;
  pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
  GlobalUnlock( hDMode );
  end;
  end;
end;

Código usados pelas impressoaras HP

Veja abaixo alguns códigos usados pelas impressoras HP:

RESET = 027/069
BOLD1 = 027/040/115/051/066
BOLD0 = 027/040/115/048/066
ITALIC1 = 027/040/115/049/083
ITALIC0 = 027/040/115/048/083
UNDERLINE1 = 027/038/100/049/068
UNDERLINE0 = 027/038/100/064
LPI6 = 027/038/108/054/068
LPI8 = 027/038/108/056/068
CPI5 = 027/040/115/053/072
CPI6 = 027/040/115/054/072
CPI8 = 027/040/115/056/072
CPI10 = 027/040/115/049/048/072
CPI12 = 027/040/115/049/050/072
CPI17 = 027/040/115/049/054/046/054/055/072
CPI20 = 027/040/115/050/048/072

Adicionando a soma de Fields no QRExpression do QuickReport

QRExpr1.Expression := Sum(Field1);
QRExpr2.Expression := Sum(Field2);
QRExpr3.Expression := Sum(Field1+Field2);

segunda-feira, 3 de outubro de 2011

Formatando 0000780 para 7,80

Para converter o conteuro 0000780 para, escreva o seguinte código:

procedure TForm1.Button1Click(Sender: TObject);
var
     conteudo: string;
     Valor: currency;
begin
     conteudo := '0000780';
     Valor := StrToFloat(conteudo) / 100;
      ShowMessage(Format('%m', [Valor]));
end;


Também daria para jogar para um componete TEdit. Ficaria Assim:

procedure TForm1.Button1Click(Sender: TObject);
var
     conteudo: string;
      Valor: currency;
begin
     conteudo := '0000780';
     Valor := StrToFloat(conteudo) / 100;
      edit1.text := Format('%m', [Valor]);
end;

Como criar um form completo com botões dinamicamente

Você pode criar qualquer componente do delphi de forma dinãmica, incluindo todos os componentes visuais(buttons, textedits, maskedits, labels). Para que serviria isso? Para muitas coisas, uma delas é que vocÊ pode criar qualquer controle em tempo de execução e depois de utiliza-lo descarrega-lo da memória...

Exemplo:  Como Criar um botão quando o mouse for pressionado e associar eventos nele....

É só colar dentro da unit da form....

=========inicio do copia e cola==========

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  procedure FormCreate(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;
  contador:integer;
implementation

{$R *.DFM}
uses stdctrls;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var b:tbutton;
begin
  b:=Tbutton.create(self);
  b.visible:=false;
  b.parent:=self;
  b.left:=x;
  b.top:=y;
  b.name:='Btn'+inttostr(contador);
  b.Caption:='Clique-me';
  inc(contador);
  b.visible:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
contador:=1;
end;

end.
============fim do copia e cola==========

Se quiser associar um evento ao botao é só copiar os procedimento clicou e alterar

o procedmento mouse down para o que segue....

=======inicio do copia e cola

 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var b:tbutton;
begin
  b:=Tbutton.create(self);
  b.visible:=false;
  b.parent:=self;
  b.left:=x;
  b.top:=y;
  b.name:='Btn'+inttostr(contador);
  b.Caption:='Clique-me';
  inc(contador);
  b.visible:=true;
  b.onclick:=clicou;
end;

procedure TForm1.clicou(sender: TObject);
begin
ShowMessage('Clicou!!!');
end;

=====fim do copia e cola======

Com isto concluimos que podemos criar qualquer coisa em tempo de execução com economia de memória. BAsta para isso dar o create da classe....

Para apagar o botao devemos ter cuidado para não apagar dentro do evento visto que

gerara uma exceção. Existe duas formas de se contornar isto, a primeira é fornecendo um atraso

e a segunda é atraves de uma API do windows mas isto fica para os proximos e-mails..

Como Criar Forms Em Tempo de Execução

Para você economizar memória, pode-se criar os forms de sua aplicação somente no momento da execução. Na criação do Form você define se ele é MODAL ou NÃO MODAL. Para Isso observe os seguintes códigos:

MODAL - Mostra form em modo exclusivo

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);{Carrega form na memória}
Form2.ShowModal;{Mostra form em modo exclusivo}
Form2.Free; {Libera Memória}
end;
NÃO MODAL - Mostra form em modo não exclusivo

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);{Carrega form na memória}
Form2.ShowModal;{Mostra form em modo exclusivo}
end;
No evento OnClose do Form2 coloque o seguinte código.

procedure TForm2.FormClose (Sender: Tobject; var Action : TCloseAction);
begin
Action:= caFree;
end;
Aliado a este código, deve deve alterar no delphi, no menu Options, opção Project. Mudando os forms a serem criados dinamicamente da coluna Auto-Create Forms para Avaliable Forms. a

A melhor maneira de liberar um form da memoria

Quando você usa Form.Free ou Form.Destroy, você está imediatamento solicitando a destruição do formulário. Com Form.Release, todas as mensagens pendentes no pool do formulário são postadas - exemplo: redesenho do formulário, movimento do mouse, pressionamento de tecla,...
 
Use assim:

FormXX := TFormXX.create ( application );
try
  FormXX.ShowModal
finally
  FormXX.Release;
  FormXX := nil;
end;

Curso de Delphi: 7.Consultas SQL