// 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 ListBox no Delphi
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
Redimensionando Imagens com Delphi Proporcionalmente
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
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:
Vamos ao exemplo
Em uma nova aplicação, adicione ao formulário duas Edits e um Button.
Acrescente ao uses, a unit JPEG.
Declare um novo tipo, logo abaixo do já existente, TForm1:
... 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:
... 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….
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
- A rotina não exclui a imagem original!! Ela fica salva na mesma pasta com a extensão .$$$;
- Esta função também pode ser utilizada para aumentar a imagem, entretanto, como em qualquer ampliação de bitmaps, a qualidade pode ficar comprometida;
Créditos:
Fonte: Active Delphi
Kelver Merlotti – Coordenador editorial do portal ActiveDelphi.com.br