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

Вниз

Значение свойства из DFM   Найти похожие ветки 

 
Seldon ©   (2004-08-28 19:41) [0]

Как в run-time узнать какое значение имело некоторое свойство некоторого компонента в design-time?


 
Vit@ly ©   (2004-08-28 20:16) [1]

Что есть

> некоторое свойство некоторого компонента

Свойство контрола?


 
Seldon ©   (2004-08-28 20:27) [2]


>  [1] Vit@ly ©   (28.08.04 20:16)
> Что есть
>
> > некоторое свойство некоторого компонента
>
> Свойство контрола?

Наследника TComponent


 
Vit@ly ©   (2004-08-28 20:35) [3]

Возможно я чего-то не понимаю
> свойство некоторого компонента в design-time

Но как мне кажется в design-time все имеет вои "имена"?


 
GuAV ©   (2004-08-28 20:46) [4]


> Как в run-time узнать какое значение имело некоторое свойство
> некоторого компонента в design-time?

Создать его по новой в Runtime вместе с формой и посмотреть. Орму потом не забыть прибить. Вообще-то они все из дезайнтайма попадают в RCDATA, оттуда TStream.ReadComponent читаются.


 
Seldon ©   (2004-08-28 21:11) [5]


>  [4] GuAV ©   (28.08.04 20:46)
>
> > Как в run-time узнать какое значение имело некоторое свойство
>
> > некоторого компонента в design-time?
>
> Создать его по новой в Runtime вместе с формой и посмотреть.
> Орму потом не забыть прибить. Вообще-то они все из дезайнтайма
> попадают в RCDATA, оттуда TStream.ReadComponent читаются.

А если создание формы занимает порядком времени? Нельзя ли не создавая по новой?


 
jack128 ©   (2004-08-28 21:41) [6]

Seldon ©   (28.08.04 21:11) [5]
Нельзя ли не создавая по новой?

можно. Вручную распарсить дфм - оно тебе надо?


 
Seldon ©   (2004-08-28 22:11) [7]

Я к чему клоню. Ведь при создании формы значения всех свойств читаются из RCDATA. Нельзя ли используя тот же механизм самому прочитать нужные свойства нужных компонет.


> оттуда TStream.ReadComponent читаются.

По-подробней можно?


 
GuAV ©   (2004-08-28 22:13) [8]

...А проще всего "запомнить" в OnCreate.


 
TUser ©   (2004-08-28 22:24) [9]

GuAV прав. Нельзя определить, какое св-во у компонента было 10 минут назад. Назначай св-ва динамически, при создании формы, значения читай из ini/реестра.


 
jack128 ©   (2004-08-28 22:32) [10]

Seldon ©   (28.08.04 22:11) [7]
Нельзя ли используя тот же механизм самому прочитать нужные свойства нужных компонет

то ж механизм - это Stream.ReadComponent - а это означает создание формы. Можно конечно покопаться в TReader, но это уж сам, ибо задача по сути извращенская. см > GuAV ©   (28.08.04 22:13) [8][Ответить]


 
GuAV ©   (2004-08-28 22:33) [11]


> GuAV прав

да, я прав :)

> Нельзя определить, какое св-во у компонента было 10 минут
> назад.

нельзя. но в сабже просят значение ИЗ DFM

> Назначай св-ва динамически, при создании формы, значения
> читай из ini/реестра.

Это вообще не сюда.


 
jack128 ©   (2004-08-28 22:44) [12]

мдя. задача решаемая. Посредством написания наследника TReader. Если ты этого хочешь - вперед и с песней. (потом о результатах расскажи  ;-))


 
GuAV ©   (2004-08-28 22:52) [13]

jack128 ©   (28.08.04 22:44) [12]
скажи, ещё не такое ты решал :)

> По-подробней можно?

внизу моей анкеты - тогда будет поподробнее :)


 
jack128 ©   (2004-08-28 23:00) [14]

GuAV ©   (28.08.04 22:52) [13]
вообще то это Seldon"y было.

> скажи, ещё не такое ты решал :)
такое-не такое, но исходники я перерыл конкретно (правда не в этом направлении, но все же)

> внизу моей анкеты - тогда будет поподробнее :)
угу. Написать наследника - это фактически и означает посыл к исходникам (до Ctrl+Alt+C я думаю, тут дело не дойдет ;-))
А F1 лично мне не очень помогает по этой теме - там каждый второй топик начинается со слов XXX is used internally by the Delphi environment for design-time streaming. Do not call XXX directly и дальше какая то непереводимая муть. в общем "F1 - интересно, Ctrl+Click - ещё интереснее" (с) GuAV


 
Seldon ©   (2004-08-28 23:19) [15]


> [8] GuAV ©   (28.08.04 22:13)
> ...А проще всего "запомнить" в OnCreate.

Компонент дофига, притом в OnCreate неизвестно, для каких из них придётся восстанавливать начальные значения свойств.


> [13] GuAV ©   (28.08.04 22:52)
>> > По-подробней можно?
>
> внизу моей анкеты - тогда будет поподробнее :)

Ну не такой я и ленивый. :) Сразу конечно в хелп. Только "там каждый второй топик начинается со слов XXX is used internally by the Delphi environment for design-time streaming. Do not call XXX directly и дальше какая то непереводимая муть" (c)jack128

Видимо придётся создавать всё-таки форму и брать из неё. Но ж***й чую - можно прочитать напрямую. Restorator ведь показывает формы из RCDATA в текстовом виде.


 
GuAV ©   (2004-08-28 23:22) [16]


>  Restorator ведь показывает формы из RCDATA в текстовом
> виде.

Сказали же - решается.
"можно. Вручную распарсить дфм. задача решаемая. Посредством написания наследника TReader. "  (c)jack128

Попрлбуй связатся с автором restorator"а

зы я опять анкету подправил :)


 
GuAV ©   (2004-08-28 23:26) [17]

>  Restorator ведь показывает формы из RCDATA в текстовом
> виде.

Проверил - его часто у меня глючит. Д7.


 
jack128 ©   (2004-08-28 23:57) [18]

ResHack на пятёрке нормально работает..
Кстати на счет хелпа..Из описания функции ObjectResourceToText я понял, что она нужна для этого:

var
 ResourceStream: TResourceStream;
 StringStream: TStringStream;
begin
 ResourceStream := TResourceStream.Create(hInstance, "TForm1", RT_RCDATA);
 StringStream := TStringStream.Create("");
 try
   ResourceStream.Seek(0, 0);
   ObjectResourceToText(ResourceStream, StringStream);
   StringStream.CopyFrom(ResourceStream, ResourceStream.Size);
   Memo1.Lines.Text := StringStream.DataString;
 finally
   StringStream.Free;
   ResourceStream.Free;
 end;
end;

Но результат выполнения этого кода удручает..


 
GuAV ©   (2004-08-29 00:45) [19]


> Но результат выполнения этого кода удручает..

Исправил.

var
ResourceStream: TResourceStream;
StringStream: TStringStream;
begin
ResourceStream := TResourceStream.Create(hInstance, "TForm1", RT_RCDATA);
StringStream := TStringStream.Create("");
try
  ResourceStream.Seek(0, 80);
  {ObjectResourceToText}ObjectBinaryToText(ResourceStream, StringStream);
  //StringStream.CopyFrom(ResourceStream, ResourceStream.Size);
  Memo1.Lines.Text := StringStream.DataString;
finally
  StringStream.Free;
  ResourceStream.Free;
end;
end;


 
GuAV ©   (2004-08-29 00:50) [20]

GuAV ©   (29.08.04 00:45) [19]
т.е. кривая сигнатура - ну и фиг с ней, дальше читается.
кстати, похоже Restorator читает именно так и у него та же проблема.
>   //StringStream.CopyFrom(ResourceStream, ResourceStream.Size);

Это на кой?
и в самое начало добавить
ResourceStream := nil
(это я умничаю :) )


 
GuAV ©   (2004-08-29 00:51) [21]

GuAV ©   (29.08.04 00:45) [19]
т.е. кривая сигнатура - ну и фиг с ней, дальше читается.
кстати, похоже Restorator читает именно так и у него та же проблема.
>   //StringStream.CopyFrom(ResourceStream, ResourceStream.Size);

Это на кой?
и в самое начало добавить
StringStream := nil
(это я умничаю :) )


 
jack128 ©   (2004-08-29 00:54) [22]

Хе, ну понятно, ты пропустил header и сразу приступил к разбору данных. Но это не решает вопроса, почему не работает ObjectResourceToText


> //StringStream.CopyFrom(ResourceStream,
> ResourceStream.Size);
ну это описка, сам понимаешь..


 
jack128 ©   (2004-08-29 00:55) [23]

GuAV ©   (29.08.04 0:50) [20]
т.е. кривая сигнатура - ну и фиг с ней, дальше читается.


ясно. ясно.. Надо будет покопаться в исходниках VCL - борланд, что тоже сигнатуру пропускает, что ли?


 
GuAV ©   (2004-08-29 01:16) [24]


>  борланд, что тоже сигнатуру пропускает, что ли?

при чтении компонента он её юзает, а не пропускает эти 80 байт. именно сигнатуры там четыре байта. это был ctrl+click :)


 
Seldon ©   (2004-08-29 13:03) [25]

GuAV, jack128 - cпасибо, помогли.

Я в принципе тоже до кой чего дошёл. Только копать начал в сторону TReader"a. Идея - идти по ресурсу формы методами TReader"a пока не найду нужный компонент и нужное свойство. Половину вчера сделал. Но пототом сон взял своё :) Сейчас доделаю.



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

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

Наверх





Память: 0.51 MB
Время: 0.032 c
3-1092391743
Aleksandr.
2004-08-13 14:09
2004.09.12
Как обратиться к Default ADOConnection?


1-1093786680
Antonmm
2004-08-29 17:38
2004.09.12
Размер файла


4-1090323812
STiTCH
2004-07-20 15:43
2004.09.12
Как отловить попытку запуска приложения


1-1092739951
Inco
2004-08-17 14:52
2004.09.12
Обновление приложения в рантайм.


4-1090918020
aval0n
2004-07-27 12:47
2004.09.12
сообщения Windows





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