Текущий архив: 2006.10.29;
Скачать: CL | DM;
Вниз
Задачки по Delphi Найти похожие ветки
← →
XProger © (2006-10-05 11:20) [80]guav, решения пока не знаю, вернусь с работы - подумаю :)
Пока есть идея, что в первом случае происходит обращение к property, а во втором к обычному массиву... как их скрестить в одном классе - нужно думать...
← →
McSimm © (2006-10-05 11:22) [81]
> а скажите пожалуста что гласит это Правило?
> "...подлинное имя воплощает самую суть вещи. Назвать имя
> - значит обрести над этой вещью власть... "
> Урсула Ле Гуин. "Правило имен".
:))
---
published поля имеют свойство быть доступными по имени, ссылки на компоненты формы для формы являются published полями. TControl.SetName (кажется) осущесвляет поиск среди published своего владельца и адоптацию под новое имя.
← →
McSimm © (2006-10-05 11:23) [82]*адаптацию :)
← →
ZeroDivide © (2006-10-05 13:00) [83]Мдя... это откровенная бага в VCL... никакое это не правило. Во-первых глюк страшнейший, а во вторых, думаю, там утечка памяти, т.к. Qwner, при уничтожении больше не сможет найти на себе MyNameIsA
Следовало бы поправить, например вот так:
procedure TComponent.SetName(const NewName: TComponentName);
var
OwnerField: ^TComponent;
begin
if FName <> NewName then
begin
if (NewName <> "") and not IsValidIdent(NewName) then
raise EComponentError.CreateResFmt(@SInvalidName, [NewName]);
if FOwner <> nil then
begin
FOwner.ValidateRename(Self, FName, NewName);
OwnerField := FOwner.FieldAddress(FName);
else
ValidateRename(nil, FName, NewName);
SetReference(False, OwnerField);
ChangeName(NewName);
SetReference(True, OwnerField);
end;
end;
procedure TComponent.SetReference(Enable: Boolean; Field: Pointer = nil);
begin
// Для совместимости с остальными вызовами SetReference
if Field = nil and FOwner <> nil then
Field := FOwner.FieldAddress(FName)
if Field <> nil then
if Enable then Field^ := Self else Field^ := nil;
end;
И, к тому же, такой код работал бы, как минимум, в 1.5 раза быстрее, т.к. FieldAddress не вызывалось бы 2 раза!!!
← →
McSimm © (2006-10-05 14:02) [84]Если человек пытается менять Name, он наверное знает зачем ему это надо.
Если в этом и есть глюк, то глюк не VCL, а в коде этого программиста. То же и с утечкой памяти - есть разные способы сделать так, чтобы Owner не имел возможности корректно почистить память, это не означает, что VCL имеет отношение к утечке памяти, вызванной трюкачеством программиста.
← →
ZeroDivide © (2006-10-05 14:13) [85]Нет уж извините... покажите мне, где написано, что я не могу менять значение какого то определенного поля объекта?
Если человек пытается менять Name, он наверное знает зачем ему это надо.
И если человек пытаеться менять Caption, он наверное знает зачем ему это надо. :))
В общем, отправил на QC. Ибо это Баг!
← →
Ketmar © (2006-10-05 16:18) [86]я в своё время этот код запустил. получил когнитивный диссонанс. долго думал.
← →
Gydvin © (2006-10-05 18:28) [87]
> MBo © (05.10.06 06:01) [65]
У меня упорно "Меня зовут B"
> Думкин © (05.10.06 08:56) [72]
А вот здесь я увидел - это чудо
procedure TForm1.Button1Click(Sender: TObject);
"Меня зовут А1" )))))
во втором все ровно
← →
jack128 © (2006-10-05 22:35) [88]ZeroDivide © (05.10.06 13:00) [83]
а во вторых, думаю, там утечка памяти, т.к. Qwner, при уничтожении больше не сможет найти на себе MyNameIsA
наврятли. механизм Components[]/Owner к именам никакого отнашения не имеет.
← →
Mystic © (2006-10-06 02:21) [89]А почему обязательно по Delphi? Например, написать го прогамму, играющую в уровень 5 pro дана... Кто напишет --- приз в $10M
← →
Ketmar © (2006-10-06 02:23) [90]>[89] Mystic(c) 6-Oct-2006, 02:21
>прогамму, играющую в уровень 5 pro дана...
за такие деньги -- и "го"? приписать ещё нуля три -- может, и взялся бы... %-)
← →
Mystic © (2006-10-06 02:24) [91]$10 000 000 это мало???
← →
Ketmar © (2006-10-06 02:25) [92]>[91] Mystic(c) 6-Oct-2006, 02:24
>$10 000 000 это мало???
упс. прочитал как 10 дойч-марок. %-)))
← →
Gero © (2006-10-06 02:27) [93]> [91] Mystic © (06.10.06 02:24)
> $10 000 000 это мало???
Совсем разъелись!
← →
Ketmar © (2006-10-06 02:31) [94]>[93] Gero(c) 6-Oct-2006, 02:27
>Совсем разъелись!
"маловато будет!" (ц)
Страницы: 1 2 3 вся ветка
Текущий архив: 2006.10.29;
Скачать: CL | DM;
Память: 0.63 MB
Время: 0.042 c