Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2009, 22:29   #1
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию Функция чтения из динамически созданного Edit

Доброго времени суток комрады

Задача: Написать функцию кортой будет передаваться имя динамически созданного элемента Edit (форма на котором расположен Edit то же созданна динамически) которарая будет возвращать значение введенное пользователем в этот Edit.

Решение:
Function TForm1.ReadEdit(NameEdit:string):st ring;
begin
Result:=NameEdit.Text;
end;

Delphi соответственно ругается:
[DCC Error] Unit1.pas(476): E2018 Record, object or class type required

Вот собственно и вопрос как мне обратиться к этому Edit правильно?


P.S. В инете накопал как можно положить в эдит надпись путем создания обработчика события элемента типа FormCreate или OnClick, но это не совсем то что я хочу сделать т.к. пользователь не должен кликать по элементу а должен нажать кнопку обработчик кторой считает данные из всех Edit на форме.
С уважением добрый парень-убийца…
Grandistok вне форума Ответить с цитированием
Старый 25.12.2009, 22:48   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

FindControl
или
Controls[i]
(естественно как св-ва TForm)
поищите, на форуме есть примеры.

только может всетаки лучше запомнить где то сам Эдит?
а то ресурсы тратить...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.12.2009, 22:54   #3
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=0 to Form1.ComponentCount-1 do
if Form1.Components[i].ClassName='TEdit' then
begin
Memo1.Lines.Add('Name='+(Form1.Components[i] as TEdit).Name+' Text='+(Form1.Components[i] as TEdit).Text);
end;
end;
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 30.12.2009, 23:34   #4
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию

Все вынужден сдаться и снова простить помощи
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
FindControl
или
Controls[i]
(естественно как св-ва TForm)
поищите, на форуме есть примеры.

только может всетаки лучше запомнить где то сам Эдит?
а то ресурсы тратить...
Про FindControl и Controls[i] не очень понял если чесно дадите ссылочку где подробно написано?
Цитата:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=0 to Form1.ComponentCount-1 do
if Form1.Components[i].ClassName='TEdit' then
begin
Memo1.Lines.Add('Name='+(Form1.Components[i] as TEdit).Name+' Text='+(Form1.Components[i] as TEdit).Text);
end;
end;
Изучив своял такое:

Код:
Function TForm1.ReadEdit(NameEdit:string):string;
var i:integer;
begin
 for i:=0 to ActiveMDIChild.ComponentCount-1 do
 begin
    if ActiveMDIChild.Components[i].Name=NameEdit then
        Result:=(ActiveMDIChild.Components[i] as TEdit).Text;
    MessageDlg('Цикл работает',mtConfirmation,[mbOK],0);
 end;
 MessageDlg('Выход из процедуры',mtConfirmation,[mbOK],0);
end;
Вот только функция не ничего не возвращает сообщения "Цикл работает" вообще не появляется а вот "Выход из процедуры" есть.

ЗЫ в функцию передаю значение Edit1 и заранее знаю что элемент с таким именем на форме есть.

У нас принято оформлять код специальным тэгом - кнопочка "#".
Модератор
С уважением добрый парень-убийца…

Последний раз редактировалось mihali4; 31.12.2009 в 01:28.
Grandistok вне форума Ответить с цитированием
Старый 30.12.2009, 23:37   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Кто такой "ActiveMDIChild"?
mihali4 вне форума Ответить с цитированием
Старый 01.01.2010, 22:17   #6
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию

Так ладно давайте начнем сначала

Вот собственно все что я смог написать на данный момент

Смысл програмки простой (она кстати MDI я забыл сказать): есть строка которая содержит описание формы (эелементы, их положение итд). По этому описанию програмулина создает дочернюю форму, после создания пользователь вбивает нужные ему значения и жмет кнопку, программа считывает что вбил пользователь и создает Word докумен вставляя в нужные места значения введенные пользователем (правда для Word я еще толком ничего не реализовал)

так собственно проблема в том что создать форму я смог а вот считать данные из динамически созданых на ней Edit-ов не могу

Я так уже понимаю что мне нужно выяснить Handel Edit-а и обратится к нему? Но не пойму как это сделать (функция чтения из Edit в самом низу)
Вложения
Тип файла: rar Unit1.rar (3.6 Кб, 17 просмотров)
С уважением добрый парень-убийца…
Grandistok вне форума Ответить с цитированием
Старый 05.01.2010, 19:49   #7
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию

Докопался до следующего:

Что бы обратиться к компоненту программно создаваемого дочернего окна MDI приложения нужно сотварить что то типа:

Код:
(MdiChildren as TMyForm).<Component>, (ActiveMdiChild as TMyForm).<Component> и т.д. Суть в том, чтобы привести окно к тому типу, который содержит нужный компонент.
Вот только привести к типу не могу (хотя уже пробовал методом научного тыка просто подставлять все типы которые использую но результат нулевой).

Вот пример моей функции:
Код:
Function TForm1.ReadEdit(NameEdit:string):string;
begin
TEdit((ActiveMDIChild as TForm2).FindComponen(NameEdit)).Text:='Текст!!!';
end;
Вот только она ничего не делает
А вот если я кидаю на родительскую форму Edit и пушу:
Код:
TEdit(FindComponent('Edit1')).Text:='Текст!!!';
Все получается, значит я просто неправильно обращаюсь к дочерней форме... Подозреваю что проблемма в:

Код:
TEdit((ActiveMDIChild as TForm2).FindComponen('NameEdit')).Text:='Текст!!!';
НО сам додуматься до решения не могу Как обратиться к дочерней форме правильно?


P.S. Уважаемые гуру я конечно понимаю что подобные элементарные для вас вопросы уже достали. Но неужели никто не может снизайти с небес и набрать на клавиатуре пару сток для новичка? Заранее благодарен тем кто ответит.
С уважением добрый парень-убийца…

Последний раз редактировалось Grandistok; 05.01.2010 в 19:52.
Grandistok вне форума Ответить с цитированием
Старый 05.01.2010, 20:04   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

повторяю еще раз, может вы всетаки лучше заведете массив для новых эдитов?(пусть как член класса дочерней формы)
ну и наверно соответственно методы создания/удаления/нахождения?
(перебрать массив проще чем все компоненты)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.01.2010, 22:32   #9
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию

Забил на MDI переделал все в стандартный SDI интерфейс все стало на свои места
Подскажите теперь как выяснить есть ли на TPanel какие либо элементы если я незнаю ни тип ни имя эти элементов?
С уважением добрый парень-убийца…
Grandistok вне форума Ответить с цитированием
Старый 10.01.2010, 23:01   #10
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию

Забил на MDI переделал все в стандартный SDI интерфейс все стало на свои места
Подскажите теперь как выяснить есть ли на TPanel какие либо элементы если я незнаю ни тип ни имя эти элементов?
С уважением добрый парень-убийца…
Grandistok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие OnDrawColumnCell для динамически созданного грида Pavka Помощь студентам 7 19.11.2009 14:15
Как отловить Events динамически созданного компонента? W0LF Общие вопросы Delphi 2 06.11.2009 20:35
Как создать обработчик событий для динамически созданного объекта Лукманов Александр Общие вопросы Delphi 1 22.03.2009 22:05
Поиск динамически созданного компонента GAGARIN-NEW Общие вопросы Delphi 2 30.01.2008 17:21
Поиск динамически созданного компонента GAGARIN-NEW Компоненты Delphi 2 16.12.2007 17:07