sisi231
Messages postés207Date d'inscriptionmercredi 5 mars 2003StatutMembreDernière intervention29 mars 2013
-
24 janv. 2007 à 15:14
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 2013
-
24 janv. 2007 à 16:55
Bonjour,
je souhaiterais pouvoir créer dynamiquement (i.e. pendant l'exécution de mon programme) des TBitmap et des TstringList autant que je veux.
L'ennui c'est que je ne peut pas savoir à l'avance combien je vais en créer, donc je ne peux pas tous les déclarer.
Merci de votre aide.
PS : Ne me dîtes pas qu'il faut faire b:=TBitmap.cretae par exemple je le sais c'est pour avoir des b1, b2, b3, bref j'espère que je suis clair.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 24 janv. 2007 à 16:37
fait des tableaux :
type
TBitmaps = array of TBitmap;
TStringsLists = array of TStringsList;
aprés c'est juste une question de SetLength ect...
sinon, tu peu partir sur une base TCollectionItem/TCollection, ç'est pas trop complexe a faire, et tu pourras gerer tes elements comme tu le souhaite plus facilement qu'avec des tableaux dynamique.
de plus c'est plus simple pour les liberations des objets.
tu peu regarder aussi du coter TObjectList. et deriver la classe pour l'adapter aux TBitmap et TStringsList
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 24 janv. 2007 à 16:55
Pour approfondir la proposition de fOxi, voici un exemple basé sur un TList.
type
//...
TBmpList = class(TList)
public
destructor Destroy; override;
function AddBitmap(W,H: integer): integer;
procedure DelBitmap(I: integer);
procedure ClearAll;
function GetBitmap(I: integer): TBitmap;
end;
var
//...
BmpList: TBmpList;
implementation
function TBmpList.AddBitmap(W,H: integer): integer;
var
P: ^TBitmap;
Bmp: TBitmap;
begin
Bmp: = TBitmap.Create;
with Bmp do
begin
Width:= W;
Height:= H;
PixelFormat:= pf24bit;
end;
New(P);
P^:= Bmp;
Result:= Add(P);
end;
procedure TBmpList.DelBitmap(I: integer);
var
P: ^TBitmap;
begin
if (I >= 0) and (I < Count) then
begin
P:= Items[I];
P^.Free;
Dispose(P);
Delete(I);
end;
end;
procedure TBmpList.ClearAll;
var
I: integer;
P: ^TBitmap;
begin
for I:= 0 to Count-1 do
begin
P:= Items[I];
P^.Free;
Dispose(P);
end;
Clear;
end;
destructor TBmpList.Destroy;
begin
ClearAll;
inherited Destroy;
end;
function TBmpList.GetBitmap(I: integer): TBitmap;
var
P: ^TBitmap;
begin
try
P:= Items[I];
Result:= P^;
except
Result:= nil;
//...
end;
end;
Pour utiliser cela :
BmpList:= TBmpList.Create;
I:= BmpList.AddBitmap(200,100) // nouveau bitmap de 200 sur 100
with BmpList.GetBitmap(I) do ....
Et ne pas oublier de faire un Free de BmpList quand tu n'en as plus besoin.
J'espère ne pas avoir commis d'erreur...
A +
Thierry