Текущий архив: 2004.04.11;
Скачать: CL | DM;
ВнизУказатели на TImage Найти похожие ветки
← →
Denis_Ac (2004-04-21 08:49) [0]Т.е. не совсем так... Есть структура:
type
TImg=record
name:string;
b:TBitmap;
end;
....
var
p1,p2:^TImg;
Кстати даже здесь сразу возникает вопрос - когда создаём указатель нужно делать Create или нет? (потому как если просто new(p) то всёравно работает)
Дак вот вопрос в том что есть объект Timage на форме в него грузим картинку, и записываем в p1
p1^.b:=Image1.Picture.Bitamp;
Далее грузим другой битмап и записываем его в p2.
НО ПОЧЕМУ в обоих уцказателях оказывается один и тот же рисунок (последний), Ведь это указатели, и память под них выделена....
← →
Denis_Ac (2004-04-21 08:49) [0]Т.е. не совсем так... Есть структура:
type
TImg=record
name:string;
b:TBitmap;
end;
....
var
p1,p2:^TImg;
Кстати даже здесь сразу возникает вопрос - когда создаём указатель нужно делать Create или нет? (потому как если просто new(p) то всёравно работает)
Дак вот вопрос в том что есть объект Timage на форме в него грузим картинку, и записываем в p1
p1^.b:=Image1.Picture.Bitamp;
Далее грузим другой битмап и записываем его в p2.
НО ПОЧЕМУ в обоих уцказателях оказывается один и тот же рисунок (последний), Ведь это указатели, и память под них выделена....
← →
Григорьев Антон (2004-04-21 09:07) [1]Вот именно, что это только указатели. p1 и p2 занимают по 4 байта, и оба указывают на ту картинку, которая хранится в Image1. Чтобы они могли хранить разные картинки, надо создать разные объекты. Примерно так:
New(P1);
P1.B:=TBitmap.Create;
P1.B.Assign(Image1.Picture.Bitmap);
.....
New(P2);
P2.B:=TBitmap.Create;
P2.B.Assing(Image1.Picture.Bitmap);
А перед вызовом Dispose(P) надо сделать P.B.Free.
← →
Григорьев Антон (2004-04-21 09:07) [1]Вот именно, что это только указатели. p1 и p2 занимают по 4 байта, и оба указывают на ту картинку, которая хранится в Image1. Чтобы они могли хранить разные картинки, надо создать разные объекты. Примерно так:
New(P1);
P1.B:=TBitmap.Create;
P1.B.Assign(Image1.Picture.Bitmap);
.....
New(P2);
P2.B:=TBitmap.Create;
P2.B.Assing(Image1.Picture.Bitmap);
А перед вызовом Dispose(P) надо сделать P.B.Free.
← →
vl_chel © (2004-04-21 09:15) [2]Указатель это только адрес оперативной памяти если его перезаписать память не освобождается.
В твоем примере P1 и p2 это указатели на структуру а b ссылка на клас (посути тоже указатель)
для ссылок на класс надо делать Create - создается новый экземпляр класса.
В твоем примере две ссылки на класс ссылаются на один и тотже объект Image1.Picture.Bitamp который и хранит картинку.
Если хочешь чтобы твоя структура хранила свой экземпляр картинки:
p1^.b := TBitmap.Create;
p1^.b.Assign(Image1.Picture.Bitamp);
При освобождении памяти незабудьp1^.b.Free
Кстати, твой подход для хранения не самый лучший, я бы сделал свой класс с аналогичными свойствами и хранил их экземпляры в TObjectList
← →
vl_chel © (2004-04-21 09:15) [2]Указатель это только адрес оперативной памяти если его перезаписать память не освобождается.
В твоем примере P1 и p2 это указатели на структуру а b ссылка на клас (посути тоже указатель)
для ссылок на класс надо делать Create - создается новый экземпляр класса.
В твоем примере две ссылки на класс ссылаются на один и тотже объект Image1.Picture.Bitamp который и хранит картинку.
Если хочешь чтобы твоя структура хранила свой экземпляр картинки:
p1^.b := TBitmap.Create;
p1^.b.Assign(Image1.Picture.Bitamp);
При освобождении памяти незабудьp1^.b.Free
Кстати, твой подход для хранения не самый лучший, я бы сделал свой класс с аналогичными свойствами и хранил их экземпляры в TObjectList
← →
vl_chel © (2004-04-21 09:15) [3]Указатель это только адрес оперативной памяти если его перезаписать память не освобождается.
В твоем примере P1 и p2 это указатели на структуру а b ссылка на клас (посути тоже указатель)
для ссылок на класс надо делать Create - создается новый экземпляр класса.
В твоем примере две ссылки на класс ссылаются на один и тотже объект Image1.Picture.Bitamp который и хранит картинку.
Если хочешь чтобы твоя структура хранила свой экземпляр картинки:
p1^.b := TBitmap.Create;
p1^.b.Assign(Image1.Picture.Bitamp);
При освобождении памяти незабудьp1^.b.Free
Кстати, твой подход для хранения не самый лучший, я бы сделал свой класс с аналогичными свойствами и хранил их экземпляры в TObjectList
← →
vl_chel © (2004-04-21 09:15) [3]Указатель это только адрес оперативной памяти если его перезаписать память не освобождается.
В твоем примере P1 и p2 это указатели на структуру а b ссылка на клас (посути тоже указатель)
для ссылок на класс надо делать Create - создается новый экземпляр класса.
В твоем примере две ссылки на класс ссылаются на один и тотже объект Image1.Picture.Bitamp который и хранит картинку.
Если хочешь чтобы твоя структура хранила свой экземпляр картинки:
p1^.b := TBitmap.Create;
p1^.b.Assign(Image1.Picture.Bitamp);
При освобождении памяти незабудьp1^.b.Free
Кстати, твой подход для хранения не самый лучший, я бы сделал свой класс с аналогичными свойствами и хранил их экземпляры в TObjectList
← →
ANDRIOD (2004-04-21 09:58) [4]>>>>>>>vl_chel
Про
TObjectList
Пожайлуста поподробнее
или дай ссылку если не трудно
← →
ANDRIOD (2004-04-21 09:58) [4]>>>>>>>vl_chel
Про
TObjectList
Пожайлуста поподробнее
или дай ссылку если не трудно
← →
MetalFan © (2004-04-21 10:01) [5]TObjectList - F1
Use TObjectList to store and maintain a list of objects. TObjectList provides properties and methods to add, delete, rearrange, locate, access, and sort objects. If the OwnsObjects property is set to True (the default), TObjectList controls the memory of its objects, freeing an object when its index is reassigned; when it is removed from the list with the Delete, Remove, or Clear method; or when the TObjectList instance is itself destroyed.
← →
MetalFan © (2004-04-21 10:01) [5]TObjectList - F1
Use TObjectList to store and maintain a list of objects. TObjectList provides properties and methods to add, delete, rearrange, locate, access, and sort objects. If the OwnsObjects property is set to True (the default), TObjectList controls the memory of its objects, freeing an object when its index is reassigned; when it is removed from the list with the Delete, Remove, or Clear method; or when the TObjectList instance is itself destroyed.
← →
ANDRIOD (2004-04-21 10:06) [6]Пример кто-нить киньте
← →
ANDRIOD (2004-04-21 10:06) [6]Пример кто-нить киньте
← →
MetalFan © (2004-04-21 11:57) [7]примитивный пример:
unit Unit2;
interface
uses classes, Graphics, Contnrs;
type
TObjectListItem = class
FBitMap: TBitMap;
FName: string;
constructor Create(aBitMap : TBitmap; aName: string);
destructor Destroy; override;
end;
TBitmapList = class(TObjectList)
private
function GetItem(Index: Integer): TObjectListItem;
procedure SetItem(Index: Integer; const Value: TObjectListItem);
public
function AddBitMap(anBM: TBitmap; aName: string): integer;
function GetBtimapIndex(aName: string): integer;
property Items[Index: Integer]: TObjectListItem read GetItem write SetItem; default;
end;
implementation
{ TObjectListItem }
constructor TObjectListItem.Create;
begin
FName := aName;
FBitMap := TBitmap.Create;
FBitMap.Assign(aBitMap);
end;
destructor TObjectListItem.Destroy;
begin
FBitMap.Free;
inherited;
end;
function TBitmapList.AddBitMap(anBM: TBitmap; aName: string): integer;
var
lOLItem: TObjectListItem;
begin
lOLItem := TObjectListItem.Create(anBM, aName);
result := Add(lOLItem);
end;
function TBitmapList.GetBtimapIndex(aName: string): integer;
var
i : integer;
begin
result := -1;
for i:= 0 to pred(self.Count) do
if self.Items[i].FName = aName then
begin
result := i;
break;
end;
end;
function TBitmapList.GetItem(Index: Integer): TObjectListItem;
begin
result := inherited Items[index] as TObjectListItem;
end;
procedure TBitmapList.SetItem(Index: Integer;
const Value: TObjectListItem);
begin
inherited Items[Index] := Value;
end;
end.
← →
MetalFan © (2004-04-21 11:57) [7]примитивный пример:
unit Unit2;
interface
uses classes, Graphics, Contnrs;
type
TObjectListItem = class
FBitMap: TBitMap;
FName: string;
constructor Create(aBitMap : TBitmap; aName: string);
destructor Destroy; override;
end;
TBitmapList = class(TObjectList)
private
function GetItem(Index: Integer): TObjectListItem;
procedure SetItem(Index: Integer; const Value: TObjectListItem);
public
function AddBitMap(anBM: TBitmap; aName: string): integer;
function GetBtimapIndex(aName: string): integer;
property Items[Index: Integer]: TObjectListItem read GetItem write SetItem; default;
end;
implementation
{ TObjectListItem }
constructor TObjectListItem.Create;
begin
FName := aName;
FBitMap := TBitmap.Create;
FBitMap.Assign(aBitMap);
end;
destructor TObjectListItem.Destroy;
begin
FBitMap.Free;
inherited;
end;
function TBitmapList.AddBitMap(anBM: TBitmap; aName: string): integer;
var
lOLItem: TObjectListItem;
begin
lOLItem := TObjectListItem.Create(anBM, aName);
result := Add(lOLItem);
end;
function TBitmapList.GetBtimapIndex(aName: string): integer;
var
i : integer;
begin
result := -1;
for i:= 0 to pred(self.Count) do
if self.Items[i].FName = aName then
begin
result := i;
break;
end;
end;
function TBitmapList.GetItem(Index: Integer): TObjectListItem;
begin
result := inherited Items[index] as TObjectListItem;
end;
procedure TBitmapList.SetItem(Index: Integer;
const Value: TObjectListItem);
begin
inherited Items[Index] := Value;
end;
end.
← →
ANDRIOD (2004-04-21 12:58) [8]чета я не догнал
делаю
uses unit2
почему не доступны функции :
function AddBitMap(anBM: TBitmap; aName: string): integer;
function GetBtimapIndex(aName: string): integer;
property Items[Index: Integer]: TObjectListItem read GetItem write SetItem; default;
пожайлуста обьясните
← →
ANDRIOD (2004-04-21 12:58) [8]чета я не догнал
делаю
uses unit2
почему не доступны функции :
function AddBitMap(anBM: TBitmap; aName: string): integer;
function GetBtimapIndex(aName: string): integer;
property Items[Index: Integer]: TObjectListItem read GetItem write SetItem; default;
пожайлуста обьясните
Страницы: 1 вся ветка
Текущий архив: 2004.04.11;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.036 c