Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Определение всех элементов (объектов) формы, Как можно определить все элементы формы? 
:(
    Опции темы
Марат
Дата 10.5.2005, 16:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как считать (в мемо или еще куда) все элементы коорые лежат на форме, ВКЛЮЧАЯ те, что находятся на панеляхю

Пробую делать что-то вроде:

Код
begin
for i:=0 to controlcount-1 do
  begin
  if Controls[i] is TPanel then
  begin
  memo1.Lines.Add(controls[i].name);
  end;
end;


Какие есть варианты?

Это сообщение отредактировал(а) Alex - 10.5.2005, 18:30
  Вверх
Yanis
Дата 10.5.2005, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Код

var
  i: Integer;
begin
  for i := 0 To Form1.ComponentCount-1 do
    Memo1.Lines.Add(Form1.Components[i].Name);

Тебе нужно что то типа этого?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Guest
Дата 10.5.2005, 21:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Yanis @ 10.5.2005, 16:52)
Тебе нужно что то типа этого?


Типа этого у меня есть.
Мне нужно к этому учесть еще элементы находящиеся на панелях (описанные способы не дадут нужного результата)
С этой целью я проверяю класс объекта,если это панель, то как считать с нее именая объектов? + Самое главное - как учетсть, что уровней (слоев панелей может быть много?)

  Вверх
Yanis
Дата 10.5.2005, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Guest @ 10.5.2005, 21:15)
Типа этого у меня есть.
Мне нужно к этому учесть еще элементы находящиеся на панелях (описанные способы не дадут нужного результата)
С этой целью я проверяю класс объекта,если это панель, то как считать с нее именая объектов? + Самое главное - как учетсть, что уровней (слоев панелей может быть много?)

Я всё равно не понял. Код который я привёл перебирает ВСЕ компоненты в том числе и те которые находятся на панелях. Или же объясни нормально, что тебе нужно.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Марат
Дата 10.5.2005, 22:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ДА, Ты прав. Спасибо.

Интересно, что если не прописываешь form1, то выводит все кроме содержания панелей.

Лопну от счастья если подскажешь, как можно считать объекты со всех форм (с записью в начале строки имени формы)
Хочу сделать многоязычность.
  Вверх
Yanis
Дата 10.5.2005, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Ты имеешь ввиду список всех компонентов всех форм проекта?
Код

var
  i, j: Integer;
begin
  Memo1.Clear;
  for i := 0 to Screen.FormCount-1 do
    for j := 0 to Screen.Forms[i].ComponentCount-1 do
      Memo1.Lines.Add(Screen.Forms[i].Name+'.'+Screen.Forms[i].Components[j].Name);

Это?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Марат
Дата 11.5.2005, 08:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











По всей вероятности - да.

Большое спасибо!
  Вверх
Rennigth
Дата 11.5.2005, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Код

function GetApplicationControlsName: TStrings;

  function DoGetNames(AWinControl: TWinControl): TStrings;
  var
    i: Integer;
  begin
    Result := TStringList.Create;
    if Assigned(AWinControl) then
    begin
      Result.Add(AWinControl.ClassName + ' - ' + AWinControl.Name);
      for i := 0 to AWinControl.ControlCount - 1 do
        if AWinControl.Controls[i] is TWinControl then
          Result.AddStrings(DoGetNames(TWinControl(AWinControl.Controls[i])))
        else
      Result.Add(AWinControl.Controls[i].ClassName + ' - ' +
        AWinControl.Controls[i].Name);
    end;
  end;
var
  i: Integer;
begin
  Result := TStringList.Create;
  for i := 0 to Pred(Screen.FormCount) do
    Result.AddStrings(DoGetNames(Screen.Forms[i]));
end;


но формы не включенные в проект не будут включены.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Марат
Дата 11.5.2005, 11:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Признаюсь, Сразу не разберешься.
Цитата(Rennigth @ 11.5.2005, 09:24)
но формы не включенные в проект не будут включены.

Мой код:

Код

var
  i, j: Integer;
begin
  Memo1.Clear;
  for i := 0 to Screen.FormCount-1 do
  begin
    Memo2.Lines.Add('['+Screen.Forms[i].Name+']');
    for j := 0 to Screen.Forms[i].ComponentCount-1 do
    try
      Memo1.Lines.Add(Screen.Forms[i].Name+'.'+Screen.Forms[i].Components[j].Name+'.Caption:='+****);
      Memo1.Lines.Add(Screen.Forms[i].Name+'.'+Screen.Forms[i].Components[j].Name+'.Hint:='+****);
      Memo2.Lines.Add(Screen.Forms[i].Components[j].Name+' Caption='+****);
      Memo2.Lines.Add(Screen.Forms[i].Components[j].Name+' Hint='+****);
    finally
    end;
  end;


Результат - что-то вроде:
memo2
[Form1]
Label6 Caption=
Label6 Hint=
Label4 Caption=
Label4 Hint=
и
memo1
Form1.Label6.Caption:=
Form1.Label6.Hint:=
Form1.Label4.Caption:=
Form1.Label4.Hint:=

Собственно нужно мне это для создания ini (прототип memo1) и DLL (memo2) файлы для многоязычности.
ini - хранит, DLL - подключает

В связи с этим еще вопросы:

1. Как Дописать в мемо соответственно caption и hint уже сприсутствующие на форме (названные по ходу размещения объектов)? Что поставить вместо **** ?
2. Если не сложно, объясните как лучше включить DLL в проект и сократить используемые ресурсы (чтобы при загрузке определенной формы именовались не все объекты всех форм, а только объекты подгружаемой формы)? Может что-то вроде;

Код

with 'подключаемая форма' do
begin
 Form1.Label6.Caption:=
 Form1.Label6.Hint:=
 Form1.Label4.Caption:=
 Form1.Label4.Hint:=
 Form2.Label1.Hint:=(К сожалению тоже сделает)
end;


Это сообщение отредактировал(а) Girder - 11.5.2005, 13:52
  Вверх
Alex
Дата 11.5.2005, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Модератор: Пожалуйста, один топик - один вопрос. Тема закрыта!


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0780 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.