| 
| 
 | Вопрос # 6 514/ вопрос открыт / | 
 |  Здравствуйте!
 Прошу знатоков пояснить, можно ли во время прогона программы получить список того, что есть на главной форме Form1 (panel, label, Button, Grid, MainMenu и т.д.).
 И пробежаться по нему.
 
|  |   Вопрос задал: vsorokin (статус: Посетитель)Вопрос отправлен: 11 февраля 2014, 13:58
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: DNK Здравствуйте, vsorokin!
 procedure TForm1.FormShow(Sender: TObject);
 var i: integer; Temp: TControl;
   s : string;
   len: Integer;
 begin
   for i := 0 to ComponentCount - 1 do
   begin
     if Components[i] is TControl then begin
       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;
     end else if Components[i] is TMenuItem then
       with Components[i] as TMenuItem do
         S := Name + ': '+ ClassName+ '; '+ Hint + '; ' + Caption
     else
       S := Components[i].Name + ': '+ Components[i].ClassName;
     Memo1.Lines.Add(S);
   end;
 end;
|  | Ответ отправил: DNK (статус: Студент)Время отправки: 12 февраля 2014, 13:27
 Оценка за ответ: 1
 Комментарий к оценке: Спасибо!Еще маленький доп. вопрос:
 из основной программы я открываю второе окно (ShowModal). Как получить то же самое (список того, что на втором окне) для второго окна?
 |  
 Мини-форум вопросаВсего сообщений: 17; последнее сообщение — 16 февраля 2014, 18:53; участников в обсуждении: 4. 
|   | min@y™ (статус: Доктор наук), 11 февраля 2014, 14:06 [#1]:Да, можно. У каждого потомка TComponent есть свойство Components[Index] и ComponentCount. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | DNK (статус: Студент), 11 февраля 2014, 14:32 [#2]:У меня дежавю! Тот же человек - и практически тот же вопрос. "Digital Networked Knight" |  
|   | vsorokin (статус: Посетитель), 11 февраля 2014, 14:50 [#3]:Спасибо DNK за напоминание  Помогли!
 
 Прошу не закрывать!
 
 У меня в продолжение:
 нужно вывести также пункты главного меню.
 
 Их не вижу :
 
 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;
 |  11 февраля 2014, 14:55: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором DNK 11 февраля 2014, 14:57: Вопрос закрыт (решение принял DNK): Тренеруем память! 11 февраля 2014, 15:07: Вопрос вновь открыт (изменение состояния произвёл автор вопроса — vsorokin): Прошу не закрывать!
 У меня в продолжение:
 нужно вывести также пункты главного меню.
 
 Их не вижу.
 
|   | min@y™ (статус: Доктор наук), 11 февраля 2014, 15:17 [#4]: Цитата (vsorokin): нужно вывести также пункты главного меню.  У наследников TMenu есть свойство Items:
 
 property Items: TMenuItem; default;Научись, наконец, читать хэлп уже, ёмаё! 
   Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | DNK (статус: Студент), 11 февраля 2014, 15:21 [#5]:Естественно не увидишь. Меню, как это не странно, считается невизуальным компонентом. А в предыдущем пример стоит Continue для невизуальных компонентов. Поэтому тело цикла надо переделать: 
 if Components[i] is TControl then begin
  // генерируем строку для визуальных компонентов
end else if Components[i] is TMenuItem then begin
  // генерируем строку для меню
end; "Digital Networked Knight" |  
|   | vsorokin (статус: Посетитель), 11 февраля 2014, 16:22 [#6]:Спасибо, в основном понял. 
   |  
|   | vsorokin (статус: Посетитель), 12 февраля 2014, 14:24 [#7]:Спасибо! Еще маленький доп. вопрос:
 из основной программы я открываю второе окно (ShowModal). Как получить то же самое (список того, что на втором окне) для второго окна?
 |  
|   | min@y™ (статус: Доктор наук), 12 февраля 2014, 15:28 [#8]:Ну дык создай общий модуль вот с такой функцией: 
 function GetWindowInfo(AComponent: TComponent; AList: TStrings): Integer;
var
  Index: Integer; // параметр цикла for 
begin
  if not (Assigned(AComponent) and Assigned(AList))
    then Exit;
 
  AList.Clear();
 
  for Index:= 0 to AComponent.ComponentCount - 1 do
    begin  
      // Здесь - код DNK, только вместо Memo добавляешь инфу в AList
    end; // for
 
  Result:= <можно вернуть какой-нить результат проверочный>;
end;и пользуйся ею для всех своих форм.Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | vsorokin (статус: Посетитель), 12 февраля 2014, 15:51 [#9]:Спасибо, попробую! |  
|   | DNK (статус: Студент), 12 февраля 2014, 16:02 [#10]:Мда... Жадный нынче народ пошел... "Digital Networked Knight" |  
|   | min@y™ (статус: Доктор наук), 12 февраля 2014, 16:05 [#11]: Цитата (DNK): Мда... Жадный нынче народ пошел...  Эт ты апчом?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 12 февраля 2014, 16:20 [#12]: Цитата (vsorokin): Оценка за ответ: 1
 Комментарий к оценке: Спасибо!
 
 Я чойта не понял, эт чо за перфоманс?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Толяныч (статус: 4-ый класс), 13 февраля 2014, 23:38 [#13]:Да, вот и отвечай  после  этого...  Разжёвано, растолковано. 1 - в переводе  с цифры на  слова : " Да  я  больше  забыл,  чем  ты  знаешь !" Будем  надеяться, что ТС не ту клавишу натиснул, извинится и попросит модератора  исправить на нормальную.
 |  
|   | DNK (статус: Студент), 14 февраля 2014, 00:10 [#14]:Вы только поглядите на рейтинг лучших экспертов - я намбер уан!   "Digital Networked Knight" |  
|   | min@y™ (статус: Доктор наук), 14 февраля 2014, 10:29 [#16]: Цитата (vsorokin): Больше одного плюсика за ответ не удалось поставить. Тебе не о том говорят. Не про +1 к репутации, а про оценку ответа на вопрос по 5-балльной шкале.
 Сразу видно, что правила ты не читал.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Толяныч (статус: 4-ый класс), 16 февраля 2014, 18:53 [#17]:Да,  получил  что  хотел  -  и отвалился.  Следующий  вопрос  будет  задавать  уже  под  другим ником   |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |