Fórum trabalhando com imagens sem flick #328234
29/08/2006
0
Só que agora eu coloquei alguns ´icones´ na minha form pra chamar outras janelas do programa. Esses icones são Timage com um bitmap de 32x32 pixels que podem ser arrastados com o mouse.
Quando eu arrasto os icones, tudo pisca, se eu coloco doublebuffered para true, aí dá umas piscadonas lentas.
eu testei com um componente chamado evWallpaper da TCF, e ficou ótimo, nada de piscadas etc. mas o componente é pago.
Quero saber onde consigo um componente free ou como eu faço um descendente de Timage que me permita colocar imagens de fundo no form sem flick?
Grato!
Vitor Rubio
Curtir tópico
+ 0Posts
29/08/2006
Micheus
TImageList.SetDragImage(0,0,0);
TImageList.DragLock(Parent.handle,x,y);
TImageList.ShowDragImage;
TImageList.BeginDrag(parent.handle,0,0);
TImageList.DragMove(x,y);
TImageList.HideDragImage;
TImageList.EndDrag;
TImageList.DragUnlock;
Tente dar umas olhada no help ou procurar por algum código utilizando eles.
Para tentar entender o problema, citado por ele, fiz o seguinte código (que aparentemente seria o uso sugerido por ele). Se não aparecer opção melhor, tente fazer um teste para ver se lhe é útil (derepente dá para adaptar).
procedure TForm1.FormCreate(Sender: TObject); var Bmp, Mask :TBitMap; begin Bmp := TBitmap.Create; Bmp.LoadFromFile(´U:\Micheus\mick4b.bmp´); Mask := TBitmap.Create; Mask.LoadFromFile(´U:\Micheus\mick4bmask.bmp´); ImageList1.Add(Bmp, Mask); Bmp.Free; Mask.Free; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ImageList1.SetDragImage(0,0,0); ImageList1.DragLock(handle,x,y); ImageList1.Draw(Canvas, x, y, 0, dsTransparent, itImage); ImageList1.BeginDrag(handle,0,0); end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ImageList1.Dragging then begin ImageList1.DragMove(x,y); ImageList1.Draw(Canvas, x, y, 0, dsTransparent, itImage); end; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ImageList1.HideDragImage; ImageList1.EndDrag; ImageList1.DragUnlock; end;
[]s
Gostei + 0
30/08/2006
Vitor Rubio
por exemplo, tem a propriedade ´comando´ string, que quando o usuario dá um duplo-clique na imagem, ela dá um shellexecute no comando, abrindo um programa. Se eu uso imagelist, como trato dos ecentos de click?
Alem disso, minha imagem não é um bmp, é um jpg, o que complica um pouco.
Valew!
Gostei + 0
31/08/2006
Micheus
A questão jpg/bmp não seria problema, já que seria posível obter o bitmap em seu TImage. Imagino que vc deseje implementar isto para reposicionar suas imágens na janela, é isto? Neste caso, seria possível que a imagem inicial fosse movida apenas quando o mouse fosse solto na nova posição?
Se vc não tiver uma resposta antes, quando eu puder fazer uns testes lhe dou um parecer.
Sinto não ter lhe ajudado.
Gostei + 0
31/08/2006
Vitor Rubio
Fiz de um jeito diferente, mas a dica que você me deu foi a base.
Não posso postar o código aqui, só amanha, porque está na empresa, mas a diferença está principalmente no seguinte: coloquei o codigo do startdrag, pra começar a arrastar, não quando clica, mas somente se está clicado E o mouse se move clicado. No mouse up eu coloquei o código pra colar a Timage no lugar certo. Mesmo assim, quando eu reposiciono a TImage, ele dá uma piscadinha de nada, bem pikinininha, mas perceptível. Eu acho que precisaria achar outro componenete que não fosse o Timage.
Eu tambem usava um label embaixo da imagem para aparecer o nome, mas a tela piscava por causa do reposicionamento do label, então eu preecisava arrumar um jeito de aparecer o nome embaixo sem o label, talvez via canvas.
O que eu quero fazer é o seguinte: Manja a área de trabalho do windows, com seus ícones que podem ser arrastados, que ficam azuis quando clicados e tal? quero fazer igualzinho, só que ao invez de icones pra atalhos, programas ou arquivos, terei icones que exeecutam funções / chamam forms do meu sistema.
Com as dicas que você me deu, consegui chegar beeeeem perto, talvez eu deixe assim mesmo se não conseguir melhorar.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)