Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как добратся до переменноый в другом класе? [D2005, XP]


Страницы:   1 2

norecoi1 ©   (2011-12-06 06:12:00) 

Tx = class
my_var : string;
end;

Ty = class
procedure hello;
end;

procedure y.hello;
var z : Tx;
begin
// Как ? Пробовал так, но получаю 'Access violation..'
z := nil;
z := Tx(z);
ShowMessage(z.my_var);
end;


Как добратся до переменноый/или функции в другом класе с другова класа?

d2010, Indy10, win7


KilkennyCat   (2011-12-07 07:16:00) [1]

http://rsdn.ru/?article/Delphi/Delphi_7_03.xml


norecoi1   (2011-12-07 03:24:00) [2]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, IdTCPClient;

type
 TForm1 = class(TForm)
 procedure FormCreate(Sender: TObject);
 private
   Flist : TList;
 public
   property list : TList read Flist write Flist;
 end;

 Tmy_class = class(TThread)
   public
   procedure test;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure Tmy_class.test;
begin
 // Error here, can't access the Flist var or list propertie, help !! How to access?
 TForm1(TList).list.Clear;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Flist := FList.Create;
end;

end.


norecoi1   (2011-12-07 03:22:00) [3]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, IdTCPClient;

type
 TForm1 = class(TForm)
 procedure FormCreate(Sender: TObject);
 private
   Flist : TList;
 public
   property list : TList read Flist write Flist;
 end;

 Tmy_class = class(TThread)
   public
   procedure test;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure Tmy_class.test;
var x:TForm1;
begin
 // crash - // Access violation at address 004D0D12 in module test.exe
 Form1.list.clear;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Flist := FList.Create;
end;

end.


norecoi1   (2011-12-07 02:32:00) [4]

я уже весь гугл перерыл, везде есть примеры по работе Parent -> child , но у меня же 2 родителя.

HEEEELP !((((((


norecoi1   (2011-12-07 02:01:00) [5]

x = class(TIdBaseComponent)
Fl: TList;
end;

y = class(TThread)
end;

procedure y.test;
begin
// Access violation at address 004D0D12 in module test.exe
x(TList).Fl.Clear;
end;

function x.my;
begin
Fl := TList.Create;
end;


для ясности внесу изменения в примере, добавлю что класы разные.


norecoi1   (2011-12-07 01:40:00) [6]

я нехочу не чего покупать, проста покожите как и я отстану


norecoi1   (2011-12-07 01:39:00) [7]

x = class
protected
Fl: TList;
end;

y = class
end;

procedure y.test;
begin
// Access violation at address 004D0D12 in module test.exe
x(TList).Fl.Clear;
end;

function x.my;
begin
Fl := TList.Create;
end;


Германн   (2011-12-07 01:39:00) [8]


> norecoi1   (07.12.11 01:28) [12]
>
> Я непонемаю,
>

Купи учебник! И прочитай его.
Тогда может поймешь свой бред.
P.S. Учебник по русскому языку тоже будет не лишним. :)


norecoi1   (2011-12-07 01:36:00) [9]

Sorry не тот баттн нажал, в места Код, болд.


norecoi1   (2011-12-07 01:36:00) [10]

x = class
protected
Fl: TList;
end;

y = class
end;

procedure y.test;
begin
// Access violation at address 004D0D12 in module test.exe
x(TList).Fl.Clear;
end;

function x.my;
begin
Fl := TList.Create;
end;


Помогите, уже третий день парюсь(

my base language PHP.


norecoi1   (2011-12-07 01:28:00) [11]

Я непонемаю,

создаю переменную в процедуре одного класа, и хочу достать её из другова класа.

КАК ?


Dennis I. Komarov   (2011-12-06 22:50:00) [12]

А вообще окажется что там так:
TMyClass = classs(...)
private
 FAnyVar: TAnyType
...
end;


DiamondShark   (2011-12-06 22:45:00) [13]


> // Как ? Пробовал так, но получаю 'Access violation..'
t := nil;


попробуй так:

t := Pointer(Random(MaxInt));

'Access violation..' будет значительно реже.


Dennis I. Komarov   (2011-12-06 22:08:00) [14]


> Здесь у нас совершенно другой случай.

Ага, тоже такой научный...
// Как ? Пробовал так, но получаю 'Access violation..'


Dimka Maslov   (2011-12-06 21:54:00) [15]


>  Dennis I. Komarov ©   (06.12.11 21:44) [7]


Рецентно переехавшее уютненькое /lm/ прекрасно поясняет суть метода научного тыка. Здесь у нас совершенно другой случай.


Dennis I. Komarov   (2011-12-06 21:44:00) [16]


> Dimka Maslov ©   (06.12.11 21:27) [6]

Есть такой метод - научный и эксперементальный...
А чего там и как потом посмотрим, а может и нет, главное чтоб работало...


> norecoi1   (06.12.11 20:43) [5]

Команты, плз, на каждую строчку кода: что, зачем и почему...


Dimka Maslov   (2011-12-06 21:27:00) [17]

Да, суть не меняется, как была написана полная ерунда, так и осталась.
Зачем сначала обнулять указатель на объект, а потом обращаться к его полю?


norecoi1   (2011-12-06 20:43:00) [18]

ну забыл я в примере класс create() но суть не меняется

Tx = class
my_var : string;
procedure test;
end;

Ty = class
procedure hello;
end;

Ta = class
procedure me;
end;

procedure me;
var t : Tx; // неиспользуя global var.
begin
 t := t.create;
 t.my_var := 'Hello World';
end;

procedure Ty.hello;
var t : Tx;
begin
// Как ? Пробовал так, но получаю 'Access violation..'
t := nil;
ShowMessage(Tx(t).my_var);
end;


сори за русский, учился в Латышских учагах.


Плохиш   (2011-12-06 12:38:00) [19]


> Почему орешник больше не пополняется?

Видно потому, что нет ничего нового и смешного. Такие как аФФтар сюда каждый месяц перед сессией приползают.


Dimka Maslov   (2011-12-06 10:05:00) [20]

Почему орешник больше не пополняется?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо