|
Вопрос # 6 318/ вопрос решён / |
|
Здравствуйте!
Есть у меня программа на Delphi.
В ней - главная форма, на которой размещены некоторые объекты.
У меня следующий вопрос. Как в процессе выполнения программы прочитать и вывести в файл информацию об объектах.
В частности - Caption и Hint.
Например, в текстовом виде (Caption и Hint через точку с запятой):
Form1: Пример;;
GroupBox1: Группа; Здесь размещены еще объекты;
Button1: Кнопка; Выход из программы;
...
и т.п.
 |
Вопрос задал: vsorokin (статус: Посетитель)
Вопрос отправлен: 26 ноября 2012, 16:33
Состояние вопроса: решён, ответов: 1.
|
Ответ #1. Отвечает эксперт: DNK
Здравствуйте, vsorokin!
for i := 0 to ComponentCount - 1 downto 0 do begin
if not (Components[i] is TControl) then Continue;
ctrl := Components[i] as TControl;
AddString(format('%s;%s;%s;', [ctrl.Name, ctrl.Caption, ctrl.Hint]));
end;
 |
Ответ отправил: DNK (статус: Студент)
Время отправки: 26 ноября 2012, 17:11
Оценка за ответ: 3
Комментарий к оценке: Не работает :(
ctrl.Caption, ctrl.Hint не видно из TComponent
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 27 ноября 2012, 17:50; участников в обсуждении: 3.
|
vsorokin (статус: Посетитель), 26 ноября 2012, 16:37 [#1]:
Добавление: нужно вывести информацию о всех объектах программы, помещенных на главную форму.
Т.е. нужен какой-то цикл (просмотр дерева объектов).
|
26 ноября 2012, 17:02: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором DNK Причина: Вопрос конкретно по VCL
|
DNK (статус: Студент), 26 ноября 2012, 20:35 [#2]:
А кто говорит о TComponent?
var ctrl: TControl
"Digital Networked Knight"
|
|
DNK (статус: Студент), 26 ноября 2012, 20:42 [#4]:
А почему бы и нет? вот "0 to" лишнее.
"Digital Networked Knight"
|
|
Мережников Андрей (статус: Абитуриент), 26 ноября 2012, 20:51 [#5]:
Цитата (DNK):
А почему бы и нет?
downto - цикл крутится от большего к меньшему. тогда и условие цикла надо местами поменять от ComponentCount-1 до 0. Иначе он ни разу не выполниться
|
|
DNK (статус: Студент), 27 ноября 2012, 00:41 [#6]:
Цитата (Мережников Андрей):
Иначе он ни разу не выполниться
Я даже больше скажу. Он ни разу не выполниться, потому что не скомпилится.
"Digital Networked Knight"
|
|
vsorokin (статус: Посетитель), 27 ноября 2012, 08:51 [#7]:
DNK: "А кто говорит о TComponent?
var ctrl: TControl"
Действительно, TControl позволяет видеть ctrl.Hint.
Но не показывает напрямую ctrl.Caption.
Как быть?
|
|
DNK (статус: Студент), 27 ноября 2012, 14:51 [#8]:
А что же он показывает?
"Digital Networked Knight"
|
|
vsorokin (статус: Посетитель), 27 ноября 2012, 15:48 [#9]:
При попытке ввести Temp.Caption Delphi ругается и до компиляции дело не доходит
procedure TForm1.FormShow(Sender: TObject);
var i: integer; Temp: TControl;
s : string;
begin
for i := 0 to ComponentCount - 1 do begin
if not (Components[i] is TControl) then Continue;
TEMP := Components[i] as TControl;
S := Temp.Name + ': '+ Temp.ClassName+ '; '+Temp.Hint;// + '; ' + Temp.Caption;
Memo1.Lines.Add(S);
end;
|
|
DNK (статус: Студент), 27 ноября 2012, 16:26 [#10]:
Ну да! Запамятовал что там оно приватное. Остается попробовать такую магию.
procedure TForm1.FormShow(Sender: TObject);
var i: integer; Temp: TControl;
s : string;
len: Integer;
begin
for i := 0 to ComponentCount - 1 do begin
if not (Components[i] is TControl) then Continue;
TEMP := Components[i] as TControl;
Len := Temp.GetTextLen;
SetString(s, PChar(nil), Len);
if Len <> 0 then Temp.GetTextBuf(Pointer(s), Len + 1);
S := Temp.Name + ': '+ Temp.ClassName+ '; '+Temp.Hint + '; ' + s;
Memo1.Lines.Add(S);
end;
end;
"Digital Networked Knight"
|
|
vsorokin (статус: Посетитель), 27 ноября 2012, 17:50 [#11]:
Спасибо, DNK!
|
24 декабря 2012, 09:34: Статус вопроса изменён на решённый (изменил модератор DNK): Даже поблагодарили
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|