1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | procedure TForm1.Button1Click(Sender: TObject); var item: String; begin { OBS: se o estilo do ComboBox for csDropDown, o usuário será capaz de digitar no componente. Se isso acontecer, o conteúdo do combo deverá ser obtido usando: item := ComboBox1.Text; } item := ComboBox1.Items[ComboBox1.ItemIndex]; ShowMessage('Você selecionou o ítem ' + item); end; |
Por: Gleiciano Nunes
Converter Horas para Miutos
1 2 3 4 5 | // Converter hora para minutos. Function HoraParaMin(Hora: String): Integer; begin Result := (StrToInt(Copy(Hora,1,2))*60) + StrToInt(Copy(Hora,4,2)); end; |
Trabalhando com Arrays Dinâmicos
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | // Declarando o array Var Vetor : Array of Integer; . . . // Utilizando o array SetLength(Vetor,5); // Determinando o tamanho do array. // Preenchendo o array for I := 0 to High(Vetor) do vetor[I] := I *2 //Modificando o tamanho SetLength(Vetor,10) //Preenchendo o array novamente // Preenchendo o array for I := 0 to High(Vetor) do vetor[I] := I *2 {É muito simples utilizar um array dinâmico e com ele conseguimos implementar as mesmas facilidades que tinhamos no Clipper. Algumas funções que podem ser utilizadas com o array dinâmico: } SetLength(Array,Tamanho) // - determina o número de elementos do array. //Tendo em vista que o valor default para o primeiro // elemento é 0 (zero). High(Vetor) : Integer // - retorna o maior indice do array. Ex.: se o array tem // tamanho 10 e começa em 0 o resultado seria 9. Low(Vetor) : Integer //- Retorna 0 ou seja o menor elemento do array. Length(Vetor) // - retorna o tamanho exato do array ou seja o valor //que foi definido na função SetLength. { Obs.: Um array dinâmico de tamanho 0 possui como valor NIL e não se deve passar um array deste tipo para uma função do tipo New ou Dispose} |
Fonte: Forum Invaders
Pequeno tutorial com exemplos bem descritos de como usar o componente Listbox em Delphi 7 (serve para todas as versões).
1- Como adicionar itens ao Listbox ?
por exemplo, uma palavra.
O form deve conter 1 button e um listbox, deixe bem organizado.
Veja a imagem.

1.1 – Feito o Designer basta agora dar 2 cliques no botão,
no nosso caso o botão [adicionar] e descrever o código.
Veja a imagem.

1.2 – Pronto agora é só testar, quando o botão [adicionar] for clicado
ele vai adicionar ao Listbox a palavra descrita no código independente se
a palavra é a mesma ou não.
Veja a imagem.

2 - Queria adicionar uma palavra ao ListBox mas, que fosse qualquer
uma palavra ou que a pessoa digitasse esta palavra e ela fosse adicionada
a lista do componente ListBox.
O form deve conter 1 button, 1 Edit e um listbox, deixe
bem organizado.
Veja a imagem.

2.1 – Feito o Designer basta agora dar 2 cliques no botão,
no nosso caso o botão [adicionar] e descrever o código.
Veja a imagem.

2.2 – Pronto agora é só testar, quando o botão [adicionar] for clicado
e o componente Edit tiver alguma palavra ele vai adicionar ao Listbox a palavra descrita no
componente Edit.
Veja a imagem.

3- Estou precisando Deletar uma determinada palavra no ListBox, Como faço?
3.1 – Seguindo pelo tutorial mantendo o Form com os mesmos componentes de
antes vamos apenas adicionar ao form mais 1 button com o nome de [Deletar item].
Lembre – se Deixe bem Organizado.
Veja a imagem.

3.2 – Feito o Designer basta agora dar 2 cliques no botão,
no nosso caso o botão [Deletar item] e descrever o código.
Esta opção pode ser feita de duas maneiras veja.
Veja a imagem.

3.3 – Agora é só adicionar algumas palavras ao Listbox para testar, feito isto
selecione uma palavra para ser deletada mas, uma pequena observação somente
será deletada a palavra ou valor selecionado caso não haja seleção não vai acontecer nada.

4 – Como posso fazer para saber quantos itens eu tenho na minha lista ou no meu ListBox.
4.1 – Continuando pelo mesmo Designer do nosso Form vamos adicionar mais 1 button ao Form
com o nome de [Quantidade].
Veja a imagem.

4.2 – Feito o Designer basta agora dar 2 cliques no botão,
no nosso caso o botão [Quantidade] e descrever o código.
Veja a imagem.

4.3 – Adicionem algumas palavras ao Listbox e clique no botão [Quantidade], será mostrada
uma pequena caixa de mensagem com o número de itens que contém no ListBox.
Veja a imagem

5- Queria que fosse visualizado em outro componente o item selecionado no ListBox.
5.1 – No mesmo Designer do Form vamos adicionar agora um Label com o nome de [Selecionado].
Veja a Imagem

5.2 – Feito o Designer basta agora dar 2 cliques no próprio ListBox,
e descrever o seguinte código.
Veja a imagem.

5.3 – Adicionem algumas palavras ao Listbox e clique nas palavras do ListBox, será mostrada no
Label o item selecionado no ListBox.
Veja a imagem

6 – Como faço para carregar uma lista de nomes que esta em um arquivo de texto para
o meu ListBox.
6.1 – Ao nosso form adicione agora mais 1 Button com o nome [Carregar Lista].
Veja a imagem.

6.2 – Dê 2 cliques no button com o nome [Carregar Lista] e coloque o código.
Veja a imagem.

6.3 – O Código faz o seguinte, quando o botão [Carregar Lista] for clicado será carregado
para o ListBox o arquivo lista_de_nomes.txt que está no diretório C:\ caso o arquivo que você tenha definido não exista irá ocorrer um erro no programa.
Ocorrendo tudo certo a lista será adicionada ao ListBox
Veja a imagem.

7- Eu fiz uma lista de dados e agora como faço para salvar esta lista.
7.1 – Adicione mais 1 Button ao Form, com o nome de [Salvar Lista].
Veja a imagem.

7.2 – Dê 2 cliques no button com o nome [Salvar Lista] e coloque o código.
Veja a imagem.

7.3 – O Código irá salvar todos os itens que estiverem no ListBox na mesma ordem e forma.

8- Como faço para mover os itens na lista alterando suas posições.
8.1 – Adicione ao Form 1 Button com o nome de [Primeiro].
Veja a imagem.

8.2 – Dê 2 cliques no button com o nome [Primeiro] e coloque o código.
Veja a imagem.

8.3 – Este código fará com que o item selecionado passe a primeira posição da Lista.
Lembrando que a posição 1 é definida pelo valor 0 “zero” e a posição 2 pelo valor 1 e assim por
diante.Veja a imagem.

9- Como posso fazer uma pesquisa em minha lista para saber se um determinado
dado já existe na minha lista.
9.1 – Adicione ao Form 1 Button com o nome de [Verificar Dado].
Veja a imagem.

9.2 – Dê 2 cliques no button com o nome [Verificar Dado] e coloque o código.
A função “ExisteDado” vai percorrer todos os itens do ListBox verificando
se existe um dado que a função recebe no valor “Dado” caso o dado exista no ListBox ou seja,
na sua lista a função vai retornar um valor verdadeiro caso não haja este valor a função irá
retornar o valor falso.
No nosso Button [Verifica Dado] ele vai usar a Função “ExisteDado” para verificar se na
minha lista eu tenho a palavra “Forum-Invaders” existindo ou não o dado será mostrada uma pequena caixa de mensagem com a confirmação.
Veja a imagem.

9.3 – Veja como é feita a Verificação na lista de exemplo.

Até o próximo, obrigado.
Créditos: Galak
Os arquivos INI são arquivos de configuração, que podem ser facilmente vizualizados, modificados ou apagados.
Antes de utilizarmos este tipo de arquivo com o Delphi® iremos entender o funcionamento dele.
Observe o exemplo abaixo:
[seção1] variavel=valor ; comentario nome=arquivoini ;comentario[seção2] nome=outronome
Fonte: Active Delphi
Veja nesta dica como redimensionar uma imagem no disco, proporcionalmente a uma largura pré-definida. É um método bastante útil quando se tem, por exemplo, um servidor web que recupera imagens de um banco de dados, mas precisa exibir ao usuário somente as miniaturas, e posteriormente a imagem em seu tamanho real.
Demonstrando

Figura 1 - Imagem original antes de ser redimensionada.
Antes de ser manipulada, ela possuía 400×300 pixels, com um tamanho de 15,7 KBytes. Após o redimensionamento com largura máxima de 150 pixels, passou a ter uma resolução de 150×113 e apenas 2,52 KBytes, veja:

Figura 2 - Imagem após redimensionamento
Vamos ao exemplo
Em uma nova aplicação, adicione ao formulário duas Edits e um Button.

Figura 3 - Layout do exemplo
Acrescente ao uses, a unit JPEG.
Declare um novo tipo, logo abaixo do já existente, TForm1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ... TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; private { Private declarations } public { Public declarations } end; type TRGBArray = array[Word] of TRGBTriple; pRGBArray = ^TRGBArray; var Form1: TForm1; ... |
Agora, declare as funções, na seguinte ordem:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | ... implementation {$R *.dfm} function LoadJPEGPictureFile(Bitmap:TBitmap;FilePath,FileName:string):Boolean; var JPEGImage: TJPEGImage; begin if (FileName = '') then Result := False else begin try JPEGImage := TJPEGImage.Create; try JPEGImage.LoadFromFile(FilePath + FileName); Bitmap.Assign(JPEGImage); finally JPEGImage.Free; end; except Result := False; end; end; end; function SaveJPEGPictureFile(Bitmap: TBitmap; FilePath,FileName:string; Quality: Integer): Boolean; begin Result := True; try if ForceDirectories(FilePath) then begin with TJPegImage.Create do begin try Assign(Bitmap); CompressionQuality := Quality; SaveToFile(FilePath + FileName); finally Free; end; end; end; except raise; Result := False; end; end; procedure SmoothResize(Src, Dst: TBitmap); var x, y: Integer; xP, yP: Integer; xP2, yP2: Integer; SrcLine1, SrcLine2: pRGBArray; t3: Integer; z, z2, iz2: Integer; DstLine: pRGBArray; DstGap: Integer; w1, w2, w3, w4: Integer; begin Src.PixelFormat := pf24Bit; Dst.PixelFormat := pf24Bit; if (Src.Width = Dst.Width) and (Src.Height = Dst.Height) then Dst.Assign(Src) else begin DstLine := Dst.ScanLine[0]; DstGap := Integer(Dst.ScanLine[1]) - Integer(DstLine); xP2 := MulDiv(pred(Src.Width), $10000, Dst.Width); yP2 := MulDiv(pred(Src.Height), $10000, Dst.Height); yP := 0; for y := 0 to pred(Dst.Height) do begin xP := 0; SrcLine1 := Src.ScanLine[yP shr 16]; if (yP shr 16 < pred(Src.Height)) then SrcLine2 := Src.ScanLine[succ(yP shr 16)] else SrcLine2 := Src.ScanLine[yP shr 16]; z2 := succ(yP and $FFFF); iz2 := succ((not yp) and $FFFF); for x := 0 to pred(Dst.Width) do begin t3 := xP shr 16; z := xP and $FFFF; w2 := MulDiv(z, iz2, $10000); w1 := iz2 - w2; w4 := MulDiv(z, z2, $10000); w3 := z2 - w4; DstLine[x].rgbtRed := (SrcLine1[t3].rgbtRed * w1 + SrcLine1[t3 + 1].rgbtRed * w2 + SrcLine2[t3].rgbtRed * w3 + SrcLine2[t3+1].rgbtRed * w4) shr 16; DstLine[x].rgbtGreen := (SrcLine1[t3].rgbtGreen * w1 + SrcLine1[t3 +1].rgbtGreen * w2 + SrcLine2[t3].rgbtGreen*w3+SrcLine2[t3+1].rgbtGreen * w4) shr 16; DstLine[x].rgbtBlue := (SrcLine1[t3].rgbtBlue * w1 + SrcLine1[t3 + 1].rgbtBlue * w2 + SrcLine2[t3].rgbtBlue * w3 + SrcLine2[t3 + 1].rgbtBlue * w4) shr 16; Inc(xP, xP2); end; Inc(yP, yP2); DstLine := pRGBArray(Integer(DstLine) + DstGap); end; end; end; |
Continua o código….
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | procedure ResizeImage(FileName: string; MaxWidth: Integer); var OldBitmap: TBitmap; NewBitmap: TBitmap; aWidth: Integer; JPEGImage: TJPEGImage; begin JPEGImage := TJPEGImage.Create; JPEGImage.LoadFromFile(FileName); OldBitmap := TBitmap.Create; try OldBitmap.Assign(JPEGImage); aWidth := OldBitmap.Width; begin aWidth := MaxWidth; NewBitmap := TBitmap.Create; try NewBitmap.Width := MaxWidth; NewBitmap.Height := MulDiv(MaxWidth,OldBitmap.Height,OldBitmap.Width); SmoothResize(OldBitmap, NewBitmap); RenameFile(FileName, ChangeFileExt(FileName, '.$$$')); if SaveJPEGPictureFile(NewBitmap, ExtractFilePath(FileName), ExtractFileName(FileName), MaxWidth * 2) then DeleteFile(ChangeFileExt(FileName, '.$$$')) else RenameFile(ChangeFileExt(FileName, '.$$$'), FileName); finally NewBitmap.Free; end; end; finally OldBitmap.Free; end; end; |
Pronto! Basta rodar, informar o caminho da imagem corretamente, o tamanho máximo desejado e clicar sobre o botão. Feito isso, confira seu arquivo final e veja como ficou o resultado!
Observações
Créditos:
Kelver Merlotti – Coordenador editorial do portal ActiveDelphi.com.br