|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
|||
|
|||
Не правильно я что ли процедуру определяю что-ли... Не могу понять...
|
#17
|
||||
|
||||
Form1{или имя нужной формы}.FindComponent
И почему Find Component с пробелом? Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#18
|
|||
|
|||
Извиняюсь за ошибки, тороплюсь. Можно полный синтаксис Form1{или имя нужной формы}.FindComponent, в моем случае на примере
TEdit(FindComponent('Edit'+IntToStr(1)+IntToStr(1) )).Text:='1'; Т.е. как будет выглядеть... |
#19
|
||||
|
||||
У тебя Edit на форме? Или на какой-то панели?
Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#20
|
|||
|
|||
На панели - PageControl1
|
#21
|
||||
|
||||
Странно... Даже если писать Form1.PageControl1.Pages[0].FindCompnent или Form1.TabSheet1.FindComponent не работает, но если Edit на форме, то Form1.FindComponent работает.
Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#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
|
|||
|
|||
Все разобрался! ))) Всем большое человеческое спасибо!!! Вопрос исчерпан!
|