Avatar billede dilling-hansen Nybegynder
31. juli 2009 - 15:12 Der er 9 kommentarer og
1 løsning

Knap med TImage. Kan koden fylde mindre?

Jeg har et program med en del knapper, som jeg har lavet med en TImage, så jeg kan lave billeder til dem. og bruger det her kode til at laver mouse over/down/out. det er der så til alle de forskellige knapper.

---------------------

procedure TForm1.ibtnCharHeightMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ibtnCharHeight.Picture.LoadFromFile('Images\measure_down.bmp');
end;

procedure TForm1.ibtnCharHeightMouseLeave(Sender: TObject);
begin
  ibtnCharHeight.Picture.LoadFromFile('Images\measure_up.bmp');
end;

procedure TForm1.ibtnCharHeightMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  ibtnCharHeight.Picture.LoadFromFile('Images\measure_over.bmp');
end;

-----------------

Det virker fint, men jeg synes bare det fylder meget i koden, for meget lidt kode xD
så tænkte på om man kunne lave det mere kompakt, måske i en anden Unit fil, eller en anden måde :)

Håber der er nogen der kan hjælpe :)
Avatar billede a_nor Nybegynder
31. juli 2009 - 15:31 #1
Hej,
Bliver dit Measure_over image ikke loaded et utal af gange ?
Du skal bare lave lidt logik, der sørger for at det ikke loades hvis det er inde i forvejen.
mvh
Avatar billede dilling-hansen Nybegynder
31. juli 2009 - 15:37 #2
Der kommer ikke nogen fejl, men kan godt se hvad du mener ;)
men det var ikke rigtigt svar på det jeg ledte efter :P
Avatar billede js_delphi Nybegynder
01. august 2009 - 11:11 #3
Har du skrevet denne kode til hver af knapperne?
Hvad med at saette alle dine Images til at kalde den samme event, og saa bruge Sender til at finde ud af, hvilken knap (Image), som har kaldt eventen?

I stedet for:
ibtnCharHeight.Picture.LoadFromFile('Images\measure_down.bmp');
kunne du saa skrive:
TImage(Sender).Picture.LoadFromFile('Images\measure_down.bmp');
Avatar billede dilling-hansen Nybegynder
01. august 2009 - 14:10 #4
Er ikke helt med på hvad du mener :\ (men hvis jeg var havde der jo heller ikke været noget spørgsmål ;))

men det er jo både up/over/down billeder til alle de forskellige knapper?
Avatar billede js_delphi Nybegynder
01. august 2009 - 18:56 #5
Som det er nu, har du sikkert alle dine events oprettet; 3 events for hver knap.
Proev i stedet at oprette OnMouseDown (fra Object Inspectoren), men kun for Image ibtnCharHeight, og skriv denne kode:

procedure TForm1.ibtnCharHeightMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  TImage(Sender).Picture.LoadFromFile('Images\measure_down.bmp'); end;

I Object Inspectoren for dine oevrige Images skriver du saa navnet paa OnMouseDown eventen for Image ibtnCharHeight i OnMouseDown event feltet for disse Images.

Lige gyldig hvilket af dine Images du nu trykker paa, bliver den samme event fyret af. Koden kan saa se ud fra Sender, hvilket Image, der skal skiftes billede paa.

Haaber, det var til at forstaa :)
Avatar billede dilling-hansen Nybegynder
01. august 2009 - 19:01 #6
Ja, men knapperne er jo ikke ens ;)
alle knapperne bruger jo forkellige billeder :\
Avatar billede js_delphi Nybegynder
01. august 2009 - 20:34 #7
OK, jeg forstaar.
En nem loesning kunne vaere at kalde billederne det samme som dine Images. Saa kunne man ligeledes bruge Sender til at lokalisere det rigtige billede.
Hvad siger du til det?
Avatar billede dilling-hansen Nybegynder
01. august 2009 - 22:58 #8
TImage(Sender).Picture.LoadFromFile('Images\ibtn' + TImage(Sender) + '_down.bmp');

noget i den stil?
Avatar billede js_delphi Nybegynder
02. august 2009 - 09:37 #9
TImage(Sender).Picture.LoadFromFile('Images\' + TImage(Sender).Name + '_down.bmp')
Avatar billede dilling-hansen Nybegynder
01. maj 2010 - 20:26 #10
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester