Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
14-1082105036
Style
2004-04-16 12:43
2004.05.09
Верите ли вы в НЛО, и в то что нас часто посещают инопланетяне?


8-1076746407
iudjen
2004-02-14 11:13
2004.05.09
только height или witdth на TImage


1-1082678989
Бегун
2004-04-23 04:09
2004.05.09
TListBox


11-1068245737
nsvi
2003-11-08 01:55
2004.05.09
Вопросы по ToolBar


14-1082312672
Феликс
2004-04-18 22:24
2004.05.09
Черты характера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский