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