31. december 2003 - 14:52Der er
23 kommentarer og 2 løsninger
Variabel i imagenavn
Jeg har 8*2 forskellige billeder, de hedder bit0on, bit0off, bit1on etc... Jeg ville lave en procedure som tager bit-nummeret som parameter, og ændrer billederne ala:
bit0off.visible := false; bit0on.visible := true;
Jeg ville gøre noget med bit+bitnr+off.visible := false; men det virker ikke... har i nogle forslag til hvordan jeg løser det?
procedure TForm1.switch(Bitnr : Integer); begin if readbit(bitnr) = 0 then begin WriteBit(bitnr,1); bit0off.visible := false; bit0on.visible := true; end else begin WriteBit(bitnr,0); bit0off.visible := true; bit0on.visible := false; end; end;
så den viser det rigtige billede for den enkelte bit... i javascript kunne det gøres med noget eval(), men åbenbart ikke i delphi. Bruger delhi 4 btw
Du kan styre dine billeder via en array of TImage. Array indekset fortæller, hvilket billede, der er valgt, og du kan herefter via visible-propertien styre, om de skal være on eller off.
Ja, havde tænkt på et array... men hvordan erklæres det, hvor skrives det, hvordan navngives billederne i et array etc...? Jeg er noob til delphi, så kender ikke syntaxten for det etc...
jeg kan godt se hvad det er din kode skal gøre, men er ikke helt med på hvordan det vil virke i praksis. Jeg får hvert billede ind i sin egen aray (bit[x]). Hvordan styrer jeg placeringen af dette billede, og hvordan fortæller jeg hvilket billede der skal vises?
Jeg kan da forsøge. Dine billeder gemmer du f.eks i Billedliste (TImageList). Hvis du nu vil have, at Bits[1] skal indeholde billede nr. 5 fra Billedliste, skriver du følgende:
Billedliste.GetBitmap(5,Bits[1].picture.bitmap);
Placering af Bits[1] kan du klare ved at angive Left og Top properties - f.eks:
Bits[1].Left:=150; Bits[1].Top:=100;
Jeg håber, at det kan hjælpe dig, ellers må du lige spørge igen :)
ahh, man kan højreklikke på den! Smart. Jeg kan dog kun se .bmp og .ico - kan man ikke få jpg billeder ind den vej (ville være nemmere, men det andet kan da også godt gøres).
Hvis det altid ligger fast, at du skal bruge 8*2 billeder, er der ingen grund til at deklarere arrayen dynamisk. Nu kender jeg ikke dit program, men det vil måske være smart, at deklarere den i 2 dimensioner f. eks:
Bits: Array[1..8, 1..2] of TImage;
Du kan så bruge den ene dimension af billederne til "on" og den anden dimension til "off".
Når du deklarerer arrayen statisk, skal du ikke bruge linien startende med:
I min var har jeg: billeder : array[0..7] of TImage;
jeg laver det i én dimension, da jeg vil ændre billedet, i stedet for at gøre et andet visible. Bits får fra 0 til 7.
I min form create har jeg:
for i:=0 to 7 do begin billeder[i]:=Timage.Create(Self); end; billedliste.GetBitmap(0,billeder[1].picture.bitmap); billeder[1].Visible := True; billeder[1].Left := 50; billeder[1].top := 50;
i er en integer. I min imagelist (som hedder billedliste) har jeg valgt to billedet... et on of et off (0 og 1).
Der er ikke nogen fejl - den viser bare ikke billedet.
procedure TForm1.FormShow(Sender: TObject); var i : integer; begin //initialiser billeder for i:=0 to 7 do begin billeder[i]:=Timage.Create(Self); billedliste.GetBitmap(0,billeder[i].picture.bitmap); billeder[i].Visible := True; billeder[i].Left := i*50; billeder[i].top := 200; end; end;
giver ikke nogen forskel... 0 fejl, men heller ikke nogle billeder. Og ja, har tjekket igen.. der er et billede som der skal være i den imagelist.
Er der ikke noget med at TImage skal have sat en Parent-propertyr til den form som den er tilknyttet? Det her virker hos mig, men det kan også være, det skyldes at jeg sætter TImagen til størrelsen på de billeder der ligger i listen (16x16)
ok, så har jeg NÆSTEN styr på det. billedliste.GetBitmap(1,billeder[n].picture.bitmap); skifter billedet... skærmen opdaterer bare ikke det billede med det samme.
Hvad kan man gøre for at billedet bliver opdateret? Det der sker er at den viser det samme billede, indtil jeg minimerer og åbner igen (=den opdaterer skærmbilledet). Er der en smart metode at gøre det på? Smider lige 10 points mere ind.
I ovenstående mente jeg ikke en 'proper tyr', men derimod 'property' ;-)
Tror der var to fejl i det oprindelige eksempel fra tuctoh:
1. Manglende Parent (Ejeren er selve formen mens forældren er den komponent som billedet placeres på. I ovenstående er det formen, men det kan jo eksempelvis være et TPanel).
2. Størrelsen skal passe med det der er i en TImageList (ikke testet). Kunne automatisere det lidt:
hrc, bredden var sat rigtigt :) Måske mere luck end noget andet :p
leifj, det havde du ret i! Nu viser den det jo rigtigt :D
leifj, du får 30 points (det oprindelige) og hrc får de sidste 10... i var begge en stor hjælp! Jeg opretter et nyt spm. om lidt, som omhandler det samme (vil have en event når man klikker på de billeder, eller noget usynligt som ligger oven på), men det er nok lige lovligt langt væk fra topic.
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.