Como obter o valor do item selecionado em um ComboBox

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

Coverter Horas para Minutos

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

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}

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.

listbox1

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.

listbox2

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.

listbox3

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.

listbox4

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.

listbox5

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.

listbox7

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.
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.
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.
Imagem

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.
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.
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
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
Imagem

5.2 – Feito o Designer basta agora dar 2 cliques no próprio ListBox,
e descrever o seguinte código.
Veja a imagem.
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
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.
Imagem

6.2 – Dê 2 cliques no button com o nome [Carregar Lista] e coloque o código.
Veja a imagem.
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.
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.
Imagem

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

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

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.
Imagem

8.2 – Dê 2 cliques no button com o nome [Primeiro] e coloque o código.
Veja a imagem.
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.
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.
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.
Imagem

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

Até o próximo, obrigado.

Créditos: Galak

Trabalhando com arquivos .ini no Delphi

Introdução

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

Redimensionando Imagens com Delphi Proporcionalmente

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.

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

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

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

  • 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:

Kelver Merlotti – Coordenador editorial do portal ActiveDelphi.com.br

line
footer
Powered by Wordpress | Designed by Elegant Themes