![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как добратся до переменноый в другом класе? [D2005, XP]
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]Почему орешник больше не пополняется?