gabs77
Messages postés379Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention 8 octobre 2008
-
4 mai 2007 à 14:58
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 2019
-
6 mai 2007 à 18:47
salut,
j'ai besoin d'aide pour un script tout bête mais malgré qu'il soit tout bête j'ai des difficultés !!
Donc, je cherche à faire un script de telle sorte à ce que lorsque l'on
clique sur une image (par exemple : l'image <<oeil0.bmp>> représente un oeil ) l'image change à intervalle régulier de tel sorte à ce que les changements soit visibles!!
exemple on clic sur l'oeil et l'oeil cligne des yeux, et cet évènement est traduit par 5 images de 0 à 4 :
exemple de script sans timer pour un résultat similaire :
procedure TFrmMain.Image5Click(Sender: TObject);
var
i : Integer;
begin
i := 0;
while i < 450 do
begin
Inc(i);
Image5.Picture.LoadFromFile(Dir + 'oeil'+inttostr(i div 100)+'.bmp');
Image5.Refresh;
end;
while i > 0 do
begin
Dec(i);
Image5.Picture.LoadFromFile(Dir + 'oeil'+inttostr(i div 100)+'.bmp');
Image5.Refresh;
end;
end;
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 4 mai 2007 à 16:03
Salut,
Il te faut:
<li>Une var globale, FEtatOeil: Integer, dans la section privadte de ta fiche;</li><li>Un TImage, ImgOeil, qui représente ton oeil.
</li><li>Un TTimer (onglet système), AnimTimer sur la même fiche avec :</li><li>Enabled := False</li><li>Interval := 200 (ou ce que tu veux)</li><li>OnTimer: le code ci dessous</li><li>Un bouton, BtnBeginAnim pour débuter l'animation.</li><li>5 bitmaps nommés Oeil0.bmp, Oeil1.bmp .... Oeil4.bmp qui sont les états de l'oeil
</li>OnClick du bouton :
<hr size ="2" width="100%" />FEtatOeil := 0;
AnimTimer.Enabled := True;
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 4 mai 2007 à 19:57
@gabs: dans u listbox c'est pareil. Tu invalide le Listbox dans le OnTimer (Listbox.Invalidate) et dans le OnDrawItem tu dessines ton image.
Par contre, je ne sias pas ce qu'est ImgVu. Bon, c'est un TImage, mais à quoi sert-il vraiment si c'est sur le listbox que tu veux qu'il s'anime ?
A mon avis, tu devrais charger les bitmaps en mémoire et les dessiner directement sur le listbox. Regarde du côté de la classe TBitmap et TCanvas. Il y a plein de possibilités...
@Cari: que veux-tu, il laisse toujours trainer ses pieds n'importe où... ça devait bien arriver. Mais t'inquiète pas pour le parfum, il lui reste encore une source odorante ...
procedure TForm1.Image1Click(Sender: TObject);
begin
ImageTimer.Enabled:=true;
indexImage:=0;
end;
procedure TForm1.ImageTimerTimer(Sender: TObject);
Var
NameFile:String;
begin
Inc(IndexImage);
If IndexImage>5 then IndexImage:=0;
NameFile:='C:\'+IntToStr(IndexImage)+'.bmp';
Image.Picture.LoadFromFile(nameFile);
Image.Refresh;
end;
-------------------------------------
Sans Timer : Tu utilises une technique de bourrin qui doit faire exploser le CPU.
Autre solution à la style Made In Bourrin
procedure TFrmMain.Image5Click(Sender: TObject);
//On renomme les composants
var
i : Integer;
begin
i := 0;
while i < 450 do
begin
Inc(i);
Image5.Picture.LoadFromFile(Dir + 'oeil'+inttostr(i div 100)+'.bmp');
Image5.Refresh;
If i=449 then i:=0;
end;
End;
je parviens sans problème a mettre l'image en revanche, j aimerais que lorsque que l'on clic dessus l'image à l'index de la listbox s'anime tout comme vu précédemment !
donc je présume qu'il faut quelque chose de ce genre :
if (odSelected in state) then
begin
ListBox1.Canvas.Brush.Color := $00CC00DD;
ListBox1.Canvas.FillRect(Rect);
//
// evenement sur l'image pour faire oeil0 => oeil1 => oeil2 => oeil3 => oeil4
//
ListBox1.Canvas.Draw(Rect.Left, Rect.Top, imgVu.picture.graphic);
end
else
begin
ListBox1.Canvas.Brush.Color := $00FFFFFF;
ListBox1.Canvas.FillRect(Rect);
end;
for N := 0 to PicturesCount-1 do
with Pictures[N] do
begin
Name := PicturesPath + 'oeil'+inttostr(N)+'.bmp';
Exists := FileExists(Name);
end;
End;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
with Pictures[PicturesIndex] do
begin
if Exists then
begin
Image5.Picture.LoadFromFile(Name);
Image5.Invalidate;
end;
end;
PicturesIndex := (PicturesIndex + 1) mod PicturesCount;
end;
Oué oué tu as de la chance que le réseau à ce moment là il plantait : la page à 25 minutes pour se rafraichir : Gabs77 tu me dois 25 minutes en heures supplémentaires : je vais te faire racker.
Sinon on peut utiliser un TImageList : c'est meme fait pour ca.
@Cari : je veux bien un sombréro ouep mais avec le transat qui va avec