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

Вниз

Кто-нибудь может объяснить это?   Найти похожие ветки 

 
kull   (2003-02-04 15:33) [0]

Почему не компиляется данная конструкция?


procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TreeView1.Items[0].getNextSibling) then Exit;
end;


Выдает: "Variable required"


 
Игорь Шевченко   (2003-02-04 15:36) [1]

F1 - Assigned


 
oomneeq   (2003-02-04 15:39) [2]


Assigned принимает аргументом переменную (пусть даже и процедурного ТИПА), а ты подсовываешь ему функцию





 
kull   (2003-02-04 15:46) [3]


> Игорь Шевченко © (04.02.03 15:36)

Unit

System

Category

pointer and address routines

Delphi syntax:

function Assigned(const P): Boolean;


> oomneeq © (04.02.03 15:39)


См. F1

А как вам это?

procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TreeView1.GetNodeAt(0,0)) then Exit;
end;


Компиляется на ура, TreeView1.GetNodeAt(0,0) тоже функция.


 
gsu   (2003-02-04 15:49) [4]

Ура, вперед на новые подвиги ... (-:|~


 
kull   (2003-02-04 15:49) [5]

И еще в догонку:

procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TTreeNode(TreeView1.Items[0].getNextSibling)) then Exit;
end;


Тоже отлично компиляется...


 
Digitman   (2003-02-04 15:55) [6]

сделай так

if Assigned(TreeView1.Items[0].GetNextSibling()) then Exit;

и не парься с преобразованиями)


 
kull   (2003-02-04 16:01) [7]


> Digitman © (04.02.03 15:55)

Да действительно работает.
Сдается это глюк в компиляторе, может я не прав?


 
Digitman   (2003-02-04 16:08) [8]

нет, не прав

цитирую

function getNextSibling: TTreeNode; {GetNextSibling conflicts with C++ macro}

Борланд сам предупреждает об этом

мог бы и сам взглянуть)))


 
kull   (2003-02-04 16:25) [9]


> {GetNextSibling conflicts with C++ macro}

Ну и что это значит?
Я что в C++ нахожусь?


 
Игорь Шевченко   (2003-02-04 16:40) [10]

This error message occurs when you try to take the address of an expression or a constant.

program Produce;
var
I: Integer;
PI: ^Integer;
begin
PI := Addr(1);
end.

A constant like 1 does not have a memory address, so you cannot apply the operator or the Addr standard function to it.

program Solve;
var
I: Integer;
PI: ^Integer;
begin
PI := Addr(I);
end.

You need to make sure you take the address of variable.


 
kull   (2003-02-04 16:48) [11]


> Игорь Шевченко © (04.02.03 16:40)

еще раз:

if Assigned(TreeView1.GetNodeAt(0,0)) then Exit;

компиляется.


 
Романов Р.В.   (2003-02-04 17:29) [12]

Возьмем для примера некоторую функцию AA
TTestF = function: TTreeNode;

function AA: TTreeNode;
begin
Result := nil;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
d: TTestF;
begin
d := AA;

// Проверим существует ли функция?
if Assigned(d) then
ShowMessage("Function Assigned")
else
ShowMessage("Function Not Assigned");

// А теперь проверим результат этой функции.
if Assigned(d()) then
ShowMessage("Result Assigned")
else
ShowMessage("Result Not Assigned");
end;

Так что по аналогии
if Assigned(TreeView1.GetNodeAt(0,0)) проверяет результат функции, а
if Assigned(TreeView1.Items[0].getNextSibling) приводит к ошибке, т.к. TreeView1.Items[0].getNextSibling не является ни указателем на переменную ни указателем на процедуру.


 
kull   (2003-02-04 17:38) [13]


> Романов Р.В. © (04.02.03 17:29)

Вот, спасибо большое! Наконец-то нашелся человек, который что-то понимает.
Теперь-то до меня дошло. Виноват ступил. :)


 
Игорь Шевченко   (2003-02-04 18:19) [14]

kull © (04.02.03 17:38)

> Наконец-то нашелся человек, который что-то понимает.


Наконец-то нашелся человек, который разжевывает и в рот кладет.


 
kull   (2003-02-04 19:12) [15]


> Игорь Шевченко © (04.02.03 18:19)

Просто остальные разжевать не могут.


 
gsu   (2003-02-04 19:14) [16]

>> Просто остальные разжевать не могут.
не у всех же такие чеслюсти (-:|~


 
gsu   (2003-02-04 19:15) [17]

сорри, челюсти


 
kull   (2003-02-04 19:25) [18]


> Игорь Шевченко © (04.02.03 18:19)


Да и к тому же Addr и Assigned это разные вещи.

причем здесь Addr

судя по хелпу:
function Addr(X): Pointer;
function Assigned(const P): Boolean;

Assigned(TreeView1.Items[0].getNextSibling()) - компилится
Assigned(TreeView1.Items[0].getNextSibling()) - нет



 
kull   (2003-02-04 19:26) [19]


> Assigned(TreeView1.Items[0].getNextSibling()) - компилится
>
> Assigned(TreeView1.Items[0].getNextSibling()) - нет

поправочка

Assigned(TreeView1.Items[0].getNextSibling()) - компилится
Addr(TreeView1.Items[0].getNextSibling()) - нет



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

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

Наверх





Память: 0.48 MB
Время: 0.014 c
6-38406
Kent
2002-12-19 16:16
2003.02.13
Как отладить ISAPI библиотеку для IIS 5.0


14-38441
Dr.Karter
2003-01-27 10:49
2003.02.13
Как недопускать вход в интернет?


1-38200
Свой
2003-02-03 03:31
2003.02.13
Подсветка текста


14-38530
sniknik
2003-01-28 23:46
2003.02.13
Не смог разбить диск! Это нормально? 8о(


3-38044
qwerty2
2003-01-29 13:42
2003.02.13
Помогите одолеть Microsoft Access!





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