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

Вниз

сбивается указатель   Найти похожие ветки 

 
***mikle***   (2008-11-11 16:28) [0]

Здравствуйте!
Помогите пожалуйста понять почему такое происходит...
Создаю 2 класса: родительский-TMap (ссылку на рисунок формы и ссылку на дочерний объект) и дочерний-TCell (содрежит ссылку на родительский).
После этого пытаюсь изменить свойство рисунка - в этот момент сбивается указатель в дочернем объекте на родительский..
Вот сам код:


unit Unit1;

interface

uses
 Windows, SysUtils, Variants, Classes, Graphics, Controls, Forms, ExtCtrls;

type
  TForm1 = class(TForm)
   Image1: TImage;
   procedure FormCreate(Sender: TObject);
  private
   { Private declarations }
  public
   { Public declarations }
  end;
 
  PMap=^TMap;
 
  TCell=CLASS(TObject)
   map:PMap;
  end;
TMap=CLASS(TObject)
   image:TImage;
 cell:TCell;
  PROCEDURE CreateCell;
  PROCEDURE AttachImage(im:TImage);
  PROCEDURE ResizeImage;
END;

var
 Form1: TForm1;
 Map:TMap;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Map:=TMap.Create;
  Map.AttachImage(Form1.Image1);
  Map.CreateCell;
  Map.ResizeImage;
end;

{ TMap }

procedure TMap.AttachImage(im: TImage);
begin
self.image:=im;
end;

procedure TMap.CreateCell;
begin
self.cell:=TCell.Create;
  self.cell.map:=@self;
end;

procedure TMap.ResizeImage;
begin
  self.image.Height:=100;   //ССЫЛКА СБИВАЕТСЯ ЗДЕСЬ
  self.image.Width:=100;
end;

end.


До выполнения указанного действи дебагер показывал это:
Map                 (image:$95365C; cell:$953BA0)
Map.cell            (map:$12FE14)
Map.cell.map^   (image:$95365C; cell:$953BA0)
self                  (image:$95365C; cell:$953BA0)
self.cell.map^    (image:$95365C; cell:$953BA0)
После него это:
Map                 (image:$95365C; cell:$953BA0)
Map.cell            (map:$12FE14)
Map.cell.map^   (image:$4438B00; cell:$FDEB6BE8)
self                  (image:$95365C; cell:$953BA0)
self.cell.map^    (image:$4438B00; cell:$FDEB6BE8)

После выполнения второго действия  значени Map.cell.map^  опять изменяется.

Сам просто бьюсь лбом об стену уже пол дня... подскажите пожалуйста!


 
Сергей М. ©   (2008-11-11 16:35) [1]

type
 TMap = class; //предобъявление класса TCell

 TCell=class
..
  map:TMap;
..
 end;

// в том же разделе type (!!) окончательное объявление ранее предобъявленного класса TMap

 TMap=class
..
  cell:TCell;
..
 end;


 
Amoeba ©   (2008-11-11 16:39) [2]

Для начала убери нафиг такое:

> PMap=^TMap;

и впредь больше не создавай указателей на указатель. Переменная или поле типа объектного типа уже и так является указателем.


 
Сергей М. ©   (2008-11-11 16:44) [3]

и self"ы убери везде - в данном контексте он 5-е колесо у телеги


 
***mikle***   (2008-11-11 16:53) [4]

Большое спасибо!
я просто не знал что с классами преобъявление другое... в пасе всю жись делал так...

PMap=^Map;
Map=object
end;


вот и получилось.. видимо не внимательно читал хелп :)
кста, ещё почему не посмотрел - привык что в обероне так же предопределяются процедуры (через ^). Кстати - там же (в Обероне) можно тип не предопределять, а сразу сделать рекурсивные указатели - компилятор это понимает, потому в дельфях немного не привычно))


 
Amoeba ©   (2008-11-11 16:57) [5]

Автору вопроса рекомендую:
http://www.delphikingdom.com/lyceum/



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.051 c
2-1226463290
Maks_
2008-11-12 07:14
2008.12.21
Форматирование текста в поле МЕМО


1-1204827510
wild
2008-03-06 21:18
2008.12.21
Гибрид StringGrid и ComboBox


2-1226169251
Zhekson
2008-11-08 21:34
2008.12.21
Где можно прочитать про справку в приложениях Делфи???


2-1226565725
DFT
2008-11-13 11:42
2008.12.21
RGB в GrayScale


2-1226648255
asddsa
2008-11-14 10:37
2008.12.21
Потоки в классах





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