Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Указатели на 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.042 c
1-1082824349
Namo
2004-04-24 20:32
2004.05.09
как использовать UNICODE


6-1079090068
webmaster
2004-03-12 14:14
2004.05.09
HTML форма ??????


11-1068801575
Deimos
2003-11-14 12:19
2004.05.09
Проблема с потоками


3-1081924056
ГАГН
2004-04-14 10:27
2004.05.09
Проверка


1-1082522997
Denis_Ac
2004-04-21 08:49
2004.05.09
Указатели на TImage





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский