![]() |
Множественный Edit в Delphi 6
Задачка, собственно проста. (И от этого стыдно, блин:(). Мне надо создать массив Edit'ов и у всех их поменять событие OnKeyDown...
Думаю, что надо это провернуть при помощи создания класса-потомка TEdit,но не знаю, как мне это замутить.Помогите, плиз!!! :confused: |
Попробуй так
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FCheckboxes: TList; function GetCheckbox(Index: integer): TCheckbox; public property Checkboxes[Index: integer]: TCheckbox read GetCheckbox; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var i: integer; AComponent: TComponent; begin FCheckboxes := TList.Create; { ТАКЖЕ: это собирает все CheckBox в порядке очередности } for i := 0 to ComponentCount - 1 do if Components[i] is TCheckbox then FCheckboxes.Add(Components[i]); { ИЛИ: если они имеют имя CheckboxNN и вы хотите разместить их в массиве в том же порядке... } {for i := 1 to MaxInt do begin AComponent := FindComponent( 'Checkbox' + IntToStr( i ) ) ; if AComponent = NIL then break ; FCheckboxes.Add( AComponent ) ; end ;} end; procedure TForm1.FormDestroy(Sender: TObject); begin FCheckboxes.Free; end; function TForm1.GetCheckbox(Index: integer): TCheckbox; begin Result := TCheckbox(FCheckboxes[Index]); end; |
Как я понял из текста проги, она собирает в массив все чек_боксы на форме.. Но мне надо создать массив Едитов, которых еще нет на форме и разместить их в произвольном порядке, одновременно сделав так, чтобы у всех их срабатывало событие ОнКейДаун. Конкретно - мне надо чтобы юзер проги мог их по форме двигать при помощи Ctrl+arrows.Вот :idontnow: Уже все мозги себе прокипятил...
Можно было бы конечно кажому Едиту отдельно процедуру прописать.. Но если их будет под 100? :( Тем более, что в последствие собираюсь сделать из этого компонент.Там вобще универсальность нужна... |
Небольшой примерчик
Вложений: 1
Вот. Должно получиться что-то вроде этого, только Сколько будет Edit'ов зарание не известно.Но у всех должны быть определены зарание события ОнЕнтер,ОнESC,ОнКейДаун. Я не знаю, как тут лучше поступить.. Может ктонить все-таки шарит?Хелп, плиззз!! :help:
|
все довольно просто:
где-нить ( например в privat' е формы ) объявляеш массив TEdit* edits[100] и переменную на количество этих Edit' ов: int editsCount; потом где-нить ( например в OnCreate' e формы ) пишеш for ( int i = 0; i < ...; i++ ) { TEdit *edit = new TEdit(NULL);//т.к. нам его удалять edit->OnKeyDown = Edit_OnKeyDown;// ее предварительно нужно описать (в том же привате ) как void __fastcall Edit_OnKeyDown(TObject *Sender, WORD &Key, TShiftState Shift); edit->Tag = editsCount;//что б его потом найти editsCount++; //тут еще парента присобачить и парент-виндов и расположение } + не забываем про удаление если что-то еще не понятно -- пиши |
Ты не мог бы растолковать, как это проделать в Дельфе.Я В Синтаксисе Сихи не силен... Plz...
|
попробую ( я с делфями давно не работал )
значит так... массив тогда нужно объявлять как edits[100] TEdit ( если не ошибся ) цикл он и в африке цикл... TEdit *edit = new TEdit(NULL); превращается в edit = TEdit.Create(NIL); ( нужно будет где-нить объявить edit :TEdit ( так кажись ) обработчик присваивается так же, а объявляется как procedure Edit_OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); кажись все |
Создание Tedit'a делается так
unit .. ..... var Edits : array[0..100] of TEdit; count : integer; ... procedure lala (); begin Edits[count]:=TEdit.Create(Form1); Edits[count].parent:= имя панели или где их тебе надо разместить Edits[count].OnEnter:=OnEnterEdits - это твоя процедура, должна быть определена в классе формы. (procedure TForm1.OnEnterEdits....) и так далее. Для более конкретного ответа нужно больше данных. Хотя, в принципе, я тебе все, чтобы ты смог сделать сказал.Тебе только нужно оформить как тебе нужно. |
Лучше не создавать статический массив Edito'ов, а создавать их динамически и пихать ссылки на них в TList (как предложил IGaDI, только с Edit'ами вместо checkbox'ов - принципиальной разницы в этом смысле нет :)). А события OnEnter (да и любые другие) привязываются как у bloodman.
ЗЫ: Если не разберёшься - вечерком покажу как :) |
Вложений: 1
Переделал твой проект - добавил кнопку и динамический список :) Смотри вложение.
|
Все Ок. Я еще все таки написал компонент. Так препод попросил. И теперь, благодаря Al-x у меня генереться мои личные Едиты... :)Щаз еще напишу Сохранение координат в .ини и можно сказать - полноценный квик-репорт :biggrin: Кстати, если вызвать метод form1.print, с какими настройками форма будет печататься? И можно как нибудь эти параметры изменить..?
З.ы. :beer: |
| Часовой пояс GMT +4, время: 16:36. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.