Prof. Alberto Cezar de Carvalho
BRINCANDO COM O FORMULÁRIO
1. OBJETIVO: Neste tópico iremos demonstrar o uso de mais alguns objetos e iremos detalhar algumas propriedades do formulário.
2. VAMOS CRIAR UM PROJETO: Como já dissemos, deveremos seguir os seguintes passos: a. Criação de uma pasta: crie uma pasta chamada “Formulários” pendurada na pasta de
programas Delphi que você criou com o projeto anterior. Exemplo: S:\Delphi\Formulários
Entre no Delphi e grave o projeto que aparece (formulário vazio) na pasta criada acima, utilizando o ícone “Save All” (desenho de vários disquetinhos).
Grave inicialmente a “Unit’” e depois, altere o nome “Project1” para “Formulário”.
b. Elaboração da parte visual: nesta fase do projeto iremos colocar no formulário todos os objetos que iremos utilizar no nosso aplicativo, além de alterar algumas propriedades.
Objeto Aba Propriedade Valor
Form1 Já existente
Caption Brincando com o formulário Position poScreenCenter
Color clSkyBlue Panel1 Standard Align alRight
Prof. Alberto Cezar de Carvalho
SpeedButton1 Additional
Caption &Abre figura
Glyph C:\Arquivos de programas\Arquivos comuns\Borland Shared\Images\Buttons\ FLDROPEN.BMP Layout blGlyphTop SpeedButton2 Additional
Caption &Tamanho real Glyph C:\Arquivos de programas\Arquivos comuns\Borland Shared\Images\Buttons\ ZOOMIN.BMP Layout blGlyphTop SpeedButton3 Additional Caption &Imprime Glyph C:\Arquivos de programas\Arquivos comuns\Borland Shared\Images\Buttons\ PRINT.BMP Layout BlGlyphTop SpeedButton4 Additional Caption T&ransparência Glyph C:\Arquivos de programas\Arquivos comuns\Borland Shared\Images\Buttons\ BULBON.BMP Layout BlGlyphTop Image1 Additional Align AlClient
Stretch True ScrollBar1 Standard
Kind SbVertical Position 255
Max 255
Label1 Standard Caption Opacidade Label2 Standard
Caption 255
AutoSize false Alignment TaCenter
OpenPictureDialog1 Dialogs
Title Escolha uma figura InitialDir C:\Arquivos de programas\Arquivos comuns\Microsoft
Shared\Clipart\cagcat50 Filter Arquivos (*.wmf) *.wmf Arquivos (*.jpg) *.jpg Arquivos (*.bmp) *.bmp Todos os arquivos *.*
Prof. Alberto Cezar de Carvalho
Algumas observações:
• O objeto Panel1 é utilizado para isolar uma área do formulário. Todos os objetos que estão no painel não saem do mesmo, e nenhum objeto que está fora consegue entrar. • Colocando a propriedade Align = alRight no Panel1, faz com que o mesmo fique
sempre localizado à direita do formulário independentemente do tamanho e posição deste último.
• A propriedade Glyph do SpeedButton, permite que incluamos um ícone no mesmo. • A propriedade LayOut do SpeedButton, altera o posicionamento do ícone no interior do
mesmo.
• A propriedade Align = alClient do objeto Image1, faz com que esta imagem ocupe sempre toda a área do formulário, exceto a parte ocupada pelo painel. Daí, alterando o tamanho do formulário, a imagem acompanha o mesmo.
• A propriedade Kind = sbVertical do objeto ScrollBar1 faz com que a mesma se apresente na posição vertical.
• Alterando o valor da propriedade Position do objeto ScrollBar1 mudamos a posição do cursor do mesmo.
c. Elaboração dos algoritmos: é nesta fase que criamos as rotinas e métodos que farão parte do projeto, dando ao mesmo algum sentido.
i. Mudança da transparência do formulário: Para fazermos isto, iremos utilizar as propriedades “AlphaBlend” e “AlphaBlendValue” do Form1. Na primeira, colocamos o valor “True” e na segunda o valor que irá determinar a opacidade da transparência: 255 é o máximo e mínimo é 0. Na verdade, iremos atribuir o valor 100 para o mínimo, pois, se for 0 o formulário irá desaparecer completamente.
ü Mude a propriedade AlphaBlend para true. Isto garantirá o funcionamento do efeito “fade” do formulário.
ü Crie o método “OnChange” do objeto “ScrollBar1” e nele digite: procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
Form1.AlphaBlendValue:= ScrollBar1.position; Label2.caption:= IntToStr(ScrollBar1.position); end;
ü O primeiro comando atribui à propriedade AlphaBlendValue o mesmo valor que se encontra na propriedade position da ScrollBar1 (deslocamento do cursor da mesma).
ü O segundo comando, transfere para a propriedade caption do Label2 este mesmo valor, só que tivemos que fazer uso da função IntToStr para converter um valor numérico inteiro (position) para um string (caption), pois, há necessidade que os tipos sejam compatíveis.
ii. Escolhendo uma figura: Ao clicarmos no botão “Abre figura” iremos fazer surgir um diálogo de entrada de arquivo, onde o usuário poderá escolher a figura que deseja visualizar.
ü Crie o método Onclick do SpeedButton1 (Abre figura). ü Digite os seguintes comandos:
procedure TForm1.SpeedButton1Click(Sender: TObject); var arquivo: string;
begin
If OpenPictureDialog1.Execute then begin
Arquivo:= OpenPictureDialog1.Filename; Image1.picture.LoadFromFile(arquivo);
Prof. Alberto Cezar de Carvalho
end; end;
ü Primeiramente, declaramos localmente a variável “arquivo” como do tipo string. Esta variável irá guardar o nome e caminho da pasta onde se encontra a figura escolhida. (veja o comando Arquivo:= OpenPic...) ü O objeto OpenPictureDialog1 possui um método que é uma função onde
retorna um valor Booleano “true” caso o usuário tenha escolhido uma figura ou o valor “false”, caso contrário.
ü Daí, fizemos o teste If onde verificamos: se o usuário escolheu uma figura no diálogo que se abre quando a função execute for executada, então ...
ü Atribuímos à variável “arquivo” o caminho e nome da figura escolhida, informação esta que se encontra na propriedade “filename” do objeto OpenPictureDialog1.
ü Em seguida, carregamos para a propriedade “picture” do objeto Image1, através do método “LoadFromFile” (carregar de um arquivo), a figura escolhida, ou seja, aquela cuja informação se encontra na variável “arquivo”.
iii. Mostrando o tamanho real ou o tamanho forçado da figura: Na verdade, durante o início do projeto atribuímos à propriedade “stretch” do objeto “Image1” o valor “true”. Quando fizemos isto, adotamos o tamanho forçado da figura, isto é, se a figura for maior que o objeto Image1 ela será reduzida para caber na mesma e se ao contrário, ela for menor que o objeto, ela será aumentada para ocupar todo o objeto. ü Portanto, estamos nos propondo a fazer com o que o botão “Tamanho
real” ao ser clicado, passe a alternar entre o tamanho forçado e o real. ü Para conseguirmos este efeito, teremos que atribuir o valor ora true e ora
false à propriedade “Stretch” do objeto “Image1”.
ü Aproveitaremos, também, para alterar o texto da propriedade “Caption” do botão.
ü Para conseguir tais efeitos, crie o método do evento OnClick do SpeedButon2 (Tamanho real), e digite os comandos:
procedure TForm1.SpeedButton2Click(Sender: TObject); begin
Image1.Stretch:= not Image1.Stretch; If Image1.Stretch
then SpeedButton2.caption:= '&Tamanho real' else SpeedButton2.caption:= '&Tamanho forçado'; end;
ü Na primeira linha de comando nos deparamos com a função NOT do Delphi, cuja finalidade é a de inverter o estado lógico do comando colocado em seguida. Daí, se o valor de “Stretch” for true em um dado momento, a função “not” o transformará para false e atribuirá este novo valor à mesma propriedade “stretch”, e vice-versa.
ü Em seguida, testamos o estado da propriedade stretch para verificarmos qual o texto deverá ser mostrado na propriedade “caption” do botão. iv. Imprimindo a figura: para imprimir, há necessidade de se incluir no projeto mais
um formulário e dentro dele se incluir objetos da aba Qreport. Esta aba não vem instalada no Delphi 7 explicitamente, há necessidade de instala-la manualmente. Para tal, consulte o tutorial sobre o assunto.
ü Para inserir um novo formulário vá ao menu File à New à Form, o que fará surgir o Form2.
Prof. Alberto Cezar de Carvalho
ü Agora, procure a aba QReport e escolha o objeto QuickRep, acrescentando-o ao Form2. Este objeto tem o aspecto de uma folha de papel em branco toda quadriculada.
ü Com este objeto selecionado, vá à propriedade “Bands” e selecione a band “Summary”. Agora o Form2 terá o seguinte aspecto:
ü Aumente o tamanho da band Summary até encontrar uma linha tracejada azul bem abaixo no QuickRep1. Esta linha é o limite da folha de papel. ü Acrescente dentro do Summary o objeto QRImage que também se
encontra na aba QReport.
ü Aumente o tamanho do QRImage1 fazendo-o ocupar todo o espaço do Summary.
ü Agora, volte ao Form1, selecione o SpeedButton3 (Imprimir) e digite as linhas:
procedure TForm1.SpeedButton3Click(Sender: TObject); begin
Form2.QRImage1.Picture:= Form1.Image1.Picture; Form2.QuickRep1.Preview;
end;
ü A primeira linha transfere a imagem que está na propriedade “picture” do objeto “Image1” do Form1 para a mesma propriedade do objeto “QRImage1” que está no Form2.
ü A segunda linha é utilizada para se mostrar na tela um “preview” daquilo que irá ser impresso. ü O ícone da impressora que aparece no preview serve para imprimir a página. Para aumentar o Summary arraste este ponto para baixo.
Ícone que faz imprimir esta página.
Prof. Alberto Cezar de Carvalho
v. Tornando o formulário transparente: À partir do Windows 2000, é possível conseguir fazer com que o formulário fique transparente. Na propriedade “TransparentColorValue” informa-se uma cor que será considerada transparente. Em todo local onde aparece esta cor, o formulário ficará vazado. Também é necessário alterar a propriedade “TransparentColor” para “true”.
ü Crie o método do evento OnClick do SpeedButton4 (Transparência) e digite as linhas:
procedure TForm1.SpeedButton4Click(Sender: TObject); begin
Form1.TransparentColorValue:= Form1.Color;
Form1.TransparentColor:= not Form1.TransparentColor; end;
ü A primeira linha pega a cor do Form1 e a atribui à propriedade “TransparentColorValue”. Esta será a cor transparente se o valor da propriedade “TransparentColor” for “true”.
ü Novamente utilizamos o artifício de trocar o estado booleano através da função NOT para inverter de false para true e vice-versa, o valor da propriedade “TransparentColor”, fazendo o formulário ficar vazado e opaco.
d. Execução e testes: agora executamos o programa e realizamos inúmeros testes de funcionamento.
IMPLEMENTAÇÃO EXTRA
Para sumir com as bordas e fazer o Painel aparecer e desaparecer automaticamente procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
Form1.TransparentColorValue:= Form1.Color;
Form1.TransparentColor:= not Form1.TransparentColor; procedure TForm1.SpeedButton4Click(Sender: TObject); begin
Form1.TransparentColorValue:= Form1.Color;
Form1.TransparentColor:= not Form1.TransparentColor; If Form1.TransparentColor
then Form1.BorderStyle:= bsNone else Form1.BorderStyle:= bsSizeable; end;
è Acrescentar um objeto Timer
procedure TForm1.Timer1Timer(Sender: TObject); begin
If ((Mouse.CursorPos.X - Form1.Left) > (Form1.width - 110)) and ((Mouse.CursorPos.X - Form1.Left) < Form1.width) and (Mouse.CursorPos.Y > Form1.Top) and
(Mouse.CursorPos.Y < Form1.Top + Form1.Height) then Panel1.width:= 110
else Panel1.width:= 0; end;