Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1160837265
pathfinder
2006-10-14 18:47
2006.10.29
OpenFile


15-1160459701
Александр Иванов
2006-10-10 09:55
2006.10.29
Настройка Visual Source Safe 6.0


2-1160648808
0_archi_0
2006-10-12 14:26
2006.10.29
Не работает код (БД, репликация). Приложение не закрывается


15-1160051525
vidiv
2006-10-05 16:32
2006.10.29
Глюк со звуком... толи с винампом


2-1160447676
zlodey
2006-10-10 06:34
2006.10.29
Помогите разобраться