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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обратиться к компонентам формы, зная лишь ее дескриптор? 
V
    Опции темы
Диас
Дата 21.7.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 11.6.2006

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



Здравствуйте! Проблема такая: динамически создаю кучу однотипных форм, присваиваю им уникальные имя и заголовок. Потом нужно обратиться к мемо-полю конкретной формы. Узнаю ее дескриптор через FindWindow. А что делать дальше не знаю. Пробовал писать
Код

TForm2(hwn).Memo1.text:='dcfhjg';

где hwn-дескриптор, но не получается.

Есть один вариант - создать массив ссылок(Pointer) и при создании форм присваивать их ссылкам, но мне кажется, что должно быть решение на много проще. 
PM MAIL   Вверх
Matematik
Дата 21.7.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Чтобы работать с компонентом надо запомнить не его handle, а созданный экземпляр класса.
С handle надо работать на уровне winapi через sendmessage
Код

SendMessage(Handle, WM_SETTEXT, 0, Longint(PChar('text')));


Добавлено @ 09:29 
Что мешает запомнить в массиве не handle созданого компонента а его самого? 
PM MAIL WWW ICQ   Вверх
Snowy
Дата 21.7.2006, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Зачем через поиск?
Все формы живут в объекте Screen.
Screen.FormsCount - кол-во форм и Screen.Forms[n] - массив форм 
PM MAIL   Вверх
Диас
Дата 21.7.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 11.6.2006

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



Цитата

Что мешает запомнить в массиве не handle созданого компонента а его самого? 

Нет я и говорю, в массив сохранять сами формы.

Snowy, я не понял, ты предлагаешь использовать это только вместо поиска, а потом делать, как сказал Matematik? Или через Screen.Forms[i] можно обратиться к Memo этой формы? 
PM MAIL   Вверх
Snowy
Дата 21.7.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Перебирай массив форм.
Находи нужную по имени или заголовку.
Код
var i: inteher;
begin
  for i := 0 to Screen.FormCount - 1 do
    if Screen.Forms[i].Name = 'Form348' then
      TForm2(Screen.Forms[i]).Memo1.Text := 'А вот и текст';
end;
 
PM MAIL   Вверх
Диас
Дата 22.7.2006, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 11.6.2006

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



Спасибо, Snowy! Как всегда помог. Жаль я пока не могу репутацию поднимать.  smile  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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