![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
Не правильно я что ли процедуру определяю что-ли... Не могу понять...
|
|
#17
|
||||
|
||||
|
Form1{или имя нужной формы}.FindComponent
И почему Find Component с пробелом? |
|
#18
|
|||
|
|||
|
Извиняюсь за ошибки, тороплюсь. Можно полный синтаксис Form1{или имя нужной формы}.FindComponent, в моем случае на примере
TEdit(FindComponent('Edit'+IntToStr(1)+IntToStr(1) )).Text:='1'; Т.е. как будет выглядеть... |
|
#19
|
||||
|
||||
|
У тебя Edit на форме? Или на какой-то панели?
|
|
#20
|
|||
|
|||
|
На панели - PageControl1
|
|
#21
|
||||
|
||||
|
Странно... Даже если писать Form1.PageControl1.Pages[0].FindCompnent или Form1.TabSheet1.FindComponent не работает, но если Edit на форме, то Form1.FindComponent работает.
|
|
#22
|
|||
|
|||
|
Вот вот, а я еще и плохо разбираюсь...
Этот код выдернул из проги(просто кусок), он работает все ОК, выполняется при событии - нажатие на кнопку Код:
....
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
.... |
|
#23
|
|||
|
|||
|
Цитата:
FindComponent - это не просто функция, а член класса TComponent, и, соответственно, всех его наследников. Когда вы пишете просто FindComponent, компилятор выбирает метод того класса, в контексте которого происходит вызов. В частности, если вы это пишете внутри процедуры типа OnCreate, OnClick и т.п., вызывается метод формы, поскольку эти события принадлежат форме. Если вы выносите вызов за пределы контекста объекта, компилятор не находит такой функции (потому что вне потомков TComponent ее просто нет) и сообщает об ошибке. Если вы хотите непременно пользоваться FindComponent вне методов формы, указывайте явно принадлежность при вызове: Form1.FindComponent. Если вы этого не делаете, может сложиться ситуация, когда компилятор подставит неверный контекст, например, если этот вызов будет обернут в with. |
|
#24
|
|||
|
|||
|
А вообще, хочу сказать, что когда на форме присутствуют однотипные контролы (TEdit в вашем случае), работать с ними через поиск - не очень правильно. Т.е. можно, конечно, но создает лишние трудности при написании и чтении текста.
Есть такой хороший класс, называется TObjectList, он предназначен как раз для хранения контролов. Причем ему, вообще говоря, все равно - однотипные они или нет. Я бы посоветовал при создании формы создать такой объект: Код:
procedure TForm1.Create(Sender: TObject); begin ... ListOfEdits := TObjectList.Create(False); Код:
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
|
|||
|
|||
|
Спасибо большое за разьяснение... А как быть с PageControl? В своей проге я связываю свои контролы так
Edit.Parent:= PageControl1.Pages[i-1]; Т.е каждый лист отображает свои контролы.... Последний раз редактировалось PashaXP, 02.04.2008 в 11:43. |
|
#26
|
|||
|
|||
|
Все разобрался! ))) Всем большое человеческое спасибо!!! Вопрос исчерпан!
|