| 
| 
 | Вопрос # 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): Даже поблагодарили Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |