Ændre rækkefølge i ImageList med koder

Tags:    delphi

Hej.
Hvordan kan jeg ændre rækkefølgen af billeder i en Imagelist med koder? :S
Hvordan fjerner jeg et billede.
Vil evt. også gerne have nogle koder så man kan fínde ud af hvordan rækkefølgen er i øjeblikket.



Indlæg senest redigeret d. 19.06.2006 20:01 af Bruger #5097
5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Hej

Jeg er ikke helt sikker på hvad det er du vil opnå.

En TImageList er en "dims" du kan bruge designtime til at lægge et par (eller et par hundrede) bmp'er ind i din exe-fil (eller dll, eller hvad du nu kompilerer).
Rækkefølgen er fuldstændig ligegyldig, du ved bare som programmør at item[0] er et "åbn fil" billede, og item[1] er et "luk fil" billede.
Jeg kan ganske enkelt ikke greje hvornår pokker man under runtime har lyst til at lave det om.

Dit næste spørgsmål: Hvordan finder man ud af hvad rækkefølgen er? Det forstår jeg heller ikke. Lad os for argumentets skyld antage at det er muligt at ændre rækkefølgen som du gerne vil opnå.
Og lad os antage at vi har to billeder, et med "åbn fil" symbol og et med "luk fil" symbol. Når vi starter programmet er de i rækkefølgen åbn=0, luk=1.
Nu ændrer du rækkefølgen, så den nu er ukendt.... Hvad er det så du gerne vil have vist/fortalt/læst ????
Delphi ved jo ikke noget om, hvad billederne symboliserer, det eneste et billede er, er en binær memorystream der kan vises som et billede.

Så rækkefølgen er vel nummer 0 indeholder memorystream0, og nummer 1 indeholder memorystream1.

Nå, men hvorom alting gælder vil jeg dog alligevel prøve at hjælpe dig... Du kan oprette en TObjectList der indeholder pointere til objecter. De enkelte Objecter kan jo være memoryStreams, eller måske endnu bedre TBitmaps... Du starter så i en eller startsekvens af dit program med at læse alle billederne ind i TBitmaps, og lægge dem over i en TObjectList. Nu kan du sortere som du vil, slette osv..

Men som sagt, en TImageList er en designtime ting...

Håber det klarede lidt op for dig

/Jens



Der kan være mange ideer i at kunne ændre rækkefølgen. Eksempel hvis du sætter TabControl1's funktion: Image til din TImageList vil vær tab få et ikon. Men ikonerne passer kun sammen igennem TImageListens rækkefølge. Altså første tab for billede 1 i TImageList. Tab nr. 2 for billede 2 og tab 3 får billede 3 osv..



Du har tre muligheder:

1. Lad være med at ændre rækkefølgen af dine tabs, så passer det jo fint.

2. Hvis du vil bruge TabControl implementerer du en procedure på TabControls.OnGetImageIndex, heri specificerer du hvilken tabIndex skal have hvilken imageindex:

Fold kodeboks ind/udKode 


3. mulighed: Benyt TPageControl i stedet, her lægger du enkelte pages på, som du på designtime kan give det rette imageIndex.

Håber det kunne hjælpe dig.

Jens Fudge



Fedt metode 2 virker. Dine up er tjent men vil lige spørge:

for i:=0 to TabControl1.Tabs.Count-1 do
begin
case Tabindex of
i+: ImageIndex := 1;
end;

Hvorfor kan jeg ikke sige i+ ?????
Har sat i til at være integer.

Hvis der intet billede skal være på en tab hvad gør jeg så? :S



Du kan ikke sige i+ fordi det ikke er pascal.

Hvad skulle i+ betyde?
Du kan sige i+1, men tabsene er vel fra index nummer 0 til count-1, så det giver vel ikke mening...

Det du reelt gør er, at sætte alle tabs til samme billede (tror jeg det ligner)...

Jeg formoder at hvis du sætter ImgaeIndex := -1, kommer der ingen billede på.

/Jens



t