[Delphi] ImageList werkt niet

Pagina: 1
Acties:

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Het lijkt wel of ik overal op vastloop :z

Eerst de betreffende code
code:
1
2
3
4
5
procedure TfrmMain.imgExitMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  imgList.GetBitmap(0,imgExit.Picture.Bitmap);
end;

Het probleem is, dat op het moment dat ik op imgExit click, de image niet veranderd. De index (0) klopt, dat is zeker. Het is een imagelist met width 20, height 18, dezelfde dimensies als imgExit. Toch veranderd 'ie niet. Ook bij de event OnClick werkt het niet. Wat doe ik fout?

Mother, will they like this song?


  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Oh, en nu zie ik dat als ik er .Refresh of .Repaint bij uitvoer, dat de buitenkant van het plaatje zwart wordt, de binnenkant ook, en de overgang tussen beide blijft hetzelfde :S, het plaatje is gewoon een bitmap

Mother, will they like this song?


Verwijderd

waarvoor is deze code dan? kan je niet gewoon de imageindex wijzigen in je control ipv de list zelf?

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Op maandag 08 april 2002 17:13 schreef maarten het volgende:
waarvoor is deze code dan? kan je niet gewoon de imageindex wijzigen in je control ipv de list zelf?
Code is voor een image die dient als exitbutton, maar eerst van kleur veranderd (dus van image) op MouseDown.

Maar het probleem is volgens mij meer dat ie het plaatje niet meer kan veranderen nadat deze eenmaal is ge-set.

Mother, will they like this song?


Verwijderd

verander dan gewoon de imageindex van de button

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Op maandag 08 april 2002 17:22 schreef Foddex het volgende:
verander dan gewoon de imageindex van de button
Buttons hebben geen imageindexen volgens mij ?? Daarbij gaat het hier niet om een button maar om een image. De propery imgExit.Picture.Bitmap stel ik in (imgList.GetBitmap(1,imgExit.Picture.Bitmap) bij frmMain.Create, en daarna kan ik 'em niet meer op een normale manier veranderen lijkt het wel!

Mother, will they like this song?


Verwijderd

wat voor (class)type is je button?

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Op maandag 08 april 2002 17:24 schreef Foddex het volgende:
wat voor type is je button?
TImage :) Het is dus geen button, maar een image die fungeert als button. Het is gewoon een image.

Mother, will they like this song?


Verwijderd

hmm je hebt dus al je bitmaps in je exe meegecompileerd zitten begrijp ik (in een TImageList)... en dan wil je ze er @runtime uit halen... hmmmz... zo doe ik het nooit :)

Verwijderd

kan je niet iets met Assign doen? Dus TImage.ASsign(iets.uit.de.TImageList)... check de help d'r is op na zou ik zeggen

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Op maandag 08 april 2002 17:26 schreef Foddex het volgende:
kan je niet iets met Assign doen? Dus TImage.ASsign(iets.uit.de.TImageList)... check de help d'r is op na zou ik zeggen
imgExit.Assign(imgList.GetBitmap(0,imgExit.Picture.Bitmap);

Geef incompatible types

Mother, will they like this song?


  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Op maandag 08 april 2002 17:25 schreef Foddex het volgende:
hmm je hebt dus al je bitmaps in je exe meegecompileerd zitten begrijp ik (in een TImageList)... en dan wil je ze er @runtime uit halen... hmmmz... zo doe ik het nooit :)
Is wel zo makkelijk als je je programma bijvoorbeeld op een diskette/cd wil zetten, dan hoef je niet steeds die bitmaps mee te kopieren :)

Mother, will they like this song?


Verwijderd

ja omdat er uit die aanroep geen TImage komt :) check de help effe op types, weet het ook niet precies uit m'n hoofd

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
image1.Visible := false;
imagelist1.GetBitmap(teller,image1.Picture.Bitmap);
image1.Visible := true;


zo kan het maar is niet netjes :)

Opensource delphi componenten (http://www.delphi-jedi.org)


  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Op maandag 08 april 2002 17:33 schreef Mr.Nobody het volgende:
image1.Visible := false;
imagelist1.GetBitmap(teller,image1.Picture.Bitmap);
image1.Visible := true;


zo kan het maar is niet netjes :)
Werkt wel zo 8-) Maar is er niet een gewone 'normale' manier ??

Mother, will they like this song?


Verwijderd

code:
1
2
3
4
5
6
procedure TfrmMain.imgExitMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  imgList.GetBitmap(0, imgExit.Picture.Bitmap);
  imgExit.Repaint;
end;

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Op maandag 08 april 2002 18:53 schreef DiFool het volgende:
code:
1
2
3
4
5
6
procedure TfrmMain.imgExitMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  imgList.GetBitmap(0, imgExit.Picture.Bitmap);
  imgExit.Repaint;
end;
Op maandag 08 april 2002 17:12 schreef TheLunatic het volgende:
Oh, en nu zie ik dat als ik er .Refresh of .Repaint bij uitvoer, dat de buitenkant van het plaatje zwart wordt, de binnenkant ook, en de overgang tussen beide blijft hetzelfde :S, het plaatje is gewoon een bitmap
Dat gaat dus niet :(

Mother, will they like this song?


Verwijderd

Oeps, sorry; ik dacht dat het probleem was dat hij niet refreshte.

Probleem is dan - denk ik - dat de functie GetBitmap de nieuwe bitmap over de oude heen tekent. Oplossing is dan om de bitmap te wissen:
code:
1
2
3
4
5
6
7
procedure TfrmMain.imgExitMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  imgExit.Canvas.FillRect(imgExit.ClientRect);
  imgList.GetBitmap(0, imgExit.Picture.Bitmap);
  imgExit.Repaint;
end;

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
Op maandag 08 april 2002 19:28 schreef DiFool het volgende:
imgExit.Canvas.FillRect(imgExit.ClientRect);
lijkt mij een zeer trage code, die van mij is dan nog netter al was ik daar al niet tevreden over :P

moet je die code vaak gebruiken? als het 1x is dan maakt het eigenlijk niet uit

Opensource delphi componenten (http://www.delphi-jedi.org)


Verwijderd

Die code van jouw geeft toch alleen maar een refresh?

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
image1.Visible := false;
imagelist1.GetBitmap(teller,image1.Picture.Bitmap);
image1.Visible := true;
zo iets van een refresh ja. maar volgens mij is dit sneller dan tekenen op het canvas :?

Opensource delphi componenten (http://www.delphi-jedi.org)


Verwijderd

Ik kan het verkeerd hebben, maar volgens mij doet een Repaint hetzelfde.. Volgens mij was er nog een ander probleem :?

Maar dat moeten we maar 's aan TheLunatic vragen :)

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
dat hoeft niet want repaint doet het gewoon niet. heb zelf ff quick and dirty iets in elkaar gezet en het werkte hier dus ook niet. toen kwam ik op dit idee en het werkt, maar volgens mij moet het beter kunnen.

btw: mijn code werkt, dus eigenlijk is het probleem al verholpen

Opensource delphi componenten (http://www.delphi-jedi.org)


Verwijderd

Misschien zal het aan de images liggen die ik gebruik, maar ik zie dus echt geen verschil tussen jouw en mijn code :?

Gebruik je gewoon de standaard instellingen van TImage en TImageList?

Ik wil niet irritant zijn, maar wil nou eigenlijk ook wel het probleem weten ook :)

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
image1.Visible := false;
imagelist1.GetBitmap(teller,image1.Picture.Bitmap);
image1.Visible := true;
en
imgList.GetBitmap(0, imgExit.Picture.Bitmap);
imgExit.Repaint;
zit toch een duidelijk verschil in?
jij zit te tekenen op het canvas, ik forceer een repaint.

het probleem van de topicstarter is opgelost, was toch duidelijk. ik zou nog wel een betere code willen weten, want dit is niet de methode, maar dat is bijzaak

Opensource delphi componenten (http://www.delphi-jedi.org)


Verwijderd

Als je dit doet:
code:
1
2
3
4
5
6
7
procedure TfrmMain.imgExitMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  imgList.GetBitmap(0, imgExit.Picture.Bitmap);
  imgExit.Invalidate;
  imgExit.Update;
end;

werkt het dan wel?

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
die werkt idd wel. maar boeit niet meer. vindt ik nog steeds geen mooie code. het zo toch in 1x moeten kunnen of niet.

Opensource delphi componenten (http://www.delphi-jedi.org)


Verwijderd

Ik begrijp dan iig wat er fout ging :)

Aub niet geirriteerd worden/zijn, als iets niet werkt [dat is: mijn code], moet ik gewoon weten wat het is..

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Op maandag 08 april 2002 21:40 schreef DiFool het volgende:
Ik begrijp dan iig wat er fout ging :)

Aub niet geirriteerd worden/zijn, als iets niet werkt [dat is: mijn code], moet ik gewoon weten wat het is..
Feit is dat het allebei manieren niet de manieren zijn waarop het hoort, toch ?

Mother, will they like this song?


  • Belgar
  • Registratie: Januari 2002
  • Laatst online: 17-08 22:31

Belgar

Archmaster ranzige code..

vaak hetzelfde probleem gehad met Borland visual C++. Ik weet het niet precies, maar ik geloof omdat het komt omdat repaint gewoon een repaint message 'post' naar de window. Deze wordt dus uitgevoerd met de volgende aanroep van de message handler van de 'form'. Visible is een property van het object waar de functie op loopt en wordt dus onmiddelijk uitgevoerd. Invalidate maakt van de repaint message een hoge prioriteit en kan dan dus wel onmiddelijk uitgevoerd worden. zoiets dus :) (40% speculatie, 50% manuals, 10% inzicht :P )

...Als het maar werkt


  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
nog een oplossing:
code:
1
2
image1.Picture := nil;
imagelist1.GetBitmap(teller,image1.Picture.Bitmap);

werkt ook, ik denk dat dit de beste oplossing is of zijn er mensen met een beter idee?

Opensource delphi componenten (http://www.delphi-jedi.org)

Pagina: 1