Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 01.04.2008, 13:36
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Не правильно я что ли процедуру определяю что-ли... Не могу понять...
Ответить с цитированием
  #17  
Старый 01.04.2008, 13:36
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Form1{или имя нужной формы}.FindComponent
И почему Find Component с пробелом?
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #18  
Старый 01.04.2008, 13:47
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Извиняюсь за ошибки, тороплюсь. Можно полный синтаксис Form1{или имя нужной формы}.FindComponent, в моем случае на примере
TEdit(FindComponent('Edit'+IntToStr(1)+IntToStr(1) )).Text:='1';
Т.е. как будет выглядеть...
Ответить с цитированием
  #19  
Старый 01.04.2008, 13:57
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

У тебя Edit на форме? Или на какой-то панели?
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #20  
Старый 01.04.2008, 14:00
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

На панели - PageControl1
Ответить с цитированием
  #21  
Старый 01.04.2008, 14:11
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Странно... Даже если писать Form1.PageControl1.Pages[0].FindCompnent или Form1.TabSheet1.FindComponent не работает, но если Edit на форме, то Form1.FindComponent работает.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #22  
Старый 01.04.2008, 14:39
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Вот вот, а я еще и плохо разбираюсь...
Этот код выдернул из проги(просто кусок), он работает все ОК, выполняется при событии - нажатие на кнопку
Код:
....
 E_Stroka:=TEdit(FindComponent('Edit'+IntTostr(Tek)+IntToStr(z))).Text;
 Delete(E_Stroka,Length(E_Stroka)-Length(Poisk)+1,Length(Poisk));
 TEdit(FindComponent('Edit'+IntTostr(Tek)+IntToStr(z))).Text:=E_Strok
....
А если Использую TEdit(FindComponent(...).Text в своей процедуре, компилируется, но при работе проги - ошибка....
Ответить с цитированием
  #23  
Старый 01.04.2008, 18:06
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от PashaXP
Вот вот, а я еще и плохо разбираюсь...
Этот код выдернул из проги(просто кусок), он работает все ОК, выполняется при событии - нажатие на кнопку
Код:
....
 E_Stroka:=TEdit(FindComponent('Edit'+IntTostr(Tek)+IntToStr(z))).Text;
 Delete(E_Stroka,Length(E_Stroka)-Length(Poisk)+1,Length(Poisk));
 TEdit(FindComponent('Edit'+IntTostr(Tek)+IntToStr(z))).Text:=E_Strok
....
А если Использую TEdit(FindComponent(...).Text в своей процедуре, компилируется, но при работе проги - ошибка....

FindComponent - это не просто функция, а член класса TComponent, и, соответственно, всех его наследников. Когда вы пишете просто FindComponent, компилятор выбирает метод того класса, в контексте которого происходит вызов. В частности, если вы это пишете внутри процедуры типа OnCreate, OnClick и т.п., вызывается метод формы, поскольку эти события принадлежат форме. Если вы выносите вызов за пределы контекста объекта, компилятор не находит такой функции (потому что вне потомков TComponent ее просто нет) и сообщает об ошибке.

Если вы хотите непременно пользоваться FindComponent вне методов формы, указывайте явно принадлежность при вызове: Form1.FindComponent. Если вы этого не делаете, может сложиться ситуация, когда компилятор подставит неверный контекст, например, если этот вызов будет обернут в with.
Ответить с цитированием
  #24  
Старый 01.04.2008, 18:23
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

А вообще, хочу сказать, что когда на форме присутствуют однотипные контролы (TEdit в вашем случае), работать с ними через поиск - не очень правильно. Т.е. можно, конечно, но создает лишние трудности при написании и чтении текста.

Есть такой хороший класс, называется TObjectList, он предназначен как раз для хранения контролов. Причем ему, вообще говоря, все равно - однотипные они или нет.

Я бы посоветовал при создании формы создать такой объект:
Код:
procedure TForm1.Create(Sender: TObject);
begin
  ...
  ListOfEdits := TObjectList.Create(False);
Параметр False в вызове конструктора означает, что, при уничтожении TObjectList не будет уничтожать контролы, которые хранит (нам это не нужно, потому что их уничтожит сама форма, когда будет вызван ее деструктор). Потом, при создании ваших Edit`ов заносите их в список в порядке создания:
Код:
procedure TForm1.CreateEdits;
const
  EDIT_COUNT = 150000;
var
  AnEdit: TEdit;
...
begin
  ...
  for i := 0 to EDIT_COUNT - 1 do begin
    AnEdit := TEdit.Ctreate(Self);
    with AnEdit do begin
      Name := 'Edit' + IntToStr(i);
      Lef := 10;
      Top := i * AnEdit.Height + 2; 
      Parent := Self;
    end;
    ListOfEdits.Add(AnEdit);
  end;
  ...
end;
А потом просто обращайтесь к ним по индексу:
Код:
...
E_Stroka := TEdit(ListOfEdits.Items[i]).Text;
...
При уничтожении формы, уничтожьте список:
Код:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  ListOfEdits.Free;
end;
Ответить с цитированием
  #25  
Старый 02.04.2008, 09:40
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Спасибо большое за разьяснение... А как быть с PageControl? В своей проге я связываю свои контролы так
Edit.Parent:= PageControl1.Pages[i-1];
Т.е каждый лист отображает свои контролы....

Последний раз редактировалось PashaXP, 02.04.2008 в 11:43.
Ответить с цитированием
  #26  
Старый 02.04.2008, 12:21
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Все разобрался! ))) Всем большое человеческое спасибо!!! Вопрос исчерпан!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter