imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 13.03.2005, 02:49     # 1
KsarDoS
Guest
 
Сообщения: n/a

Question Множественный Edit в Delphi 6

Задачка, собственно проста. (И от этого стыдно, блин). Мне надо создать массив Edit'ов и у всех их поменять событие OnKeyDown...

Думаю, что надо это провернуть при помощи создания класса-потомка TEdit,но не знаю, как мне это замутить.Помогите, плиз!!!
 
Старый 13.03.2005, 14:06     # 2
IGaDI
Junior Member
 
Регистрация: 24.02.2005
Сообщения: 97

IGaDI Известность не заставит себя ждатьIGaDI Известность не заставит себя ждать
Попробуй так

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;
IGaDI вне форума  
Старый 13.03.2005, 19:42     # 3
KsarDoS
Guest
 
Сообщения: n/a

Как я понял из текста проги, она собирает в массив все чек_боксы на форме.. Но мне надо создать массив Едитов, которых еще нет на форме и разместить их в произвольном порядке, одновременно сделав так, чтобы у всех их срабатывало событие ОнКейДаун. Конкретно - мне надо чтобы юзер проги мог их по форме двигать при помощи Ctrl+arrows.Вот Уже все мозги себе прокипятил...

Можно было бы конечно кажому Едиту отдельно процедуру прописать.. Но если их будет под 100? Тем более, что в последствие собираюсь сделать из этого компонент.Там вобще универсальность нужна...

Последний раз редактировалось KsarDoS; 13.03.2005 в 19:46.
 
Старый 14.03.2005, 23:07     # 4
KsarDoS
Guest
 
Сообщения: n/a

Exclamation Небольшой примерчик

Вот. Должно получиться что-то вроде этого, только Сколько будет Edit'ов зарание не известно.Но у всех должны быть определены зарание события ОнЕнтер,ОнESC,ОнКейДаун. Я не знаю, как тут лучше поступить.. Может ктонить все-таки шарит?Хелп, плиззз!!
Вложения
Тип файла: zip Edit.zip (6.1 Кбайт, 2 просмотров - Кто скачивал? )
 
Старый 15.03.2005, 00:01     # 5
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
все довольно просто:
где-нить ( например в 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++;
//тут еще парента присобачить и парент-виндов и расположение
}

+ не забываем про удаление

если что-то еще не понятно -- пиши
dyr_farot вне форума  
Старый 15.03.2005, 02:02     # 6
KsarDoS
Guest
 
Сообщения: n/a

Ты не мог бы растолковать, как это проделать в Дельфе.Я В Синтаксисе Сихи не силен... Plz...
 
Старый 15.03.2005, 16:40     # 7
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
попробую ( я с делфями давно не работал )
значит так...
массив тогда нужно объявлять как edits[100] TEdit ( если не ошибся )
цикл он и в африке цикл...
TEdit *edit = new TEdit(NULL); превращается в edit = TEdit.Create(NIL); ( нужно будет где-нить объявить edit :TEdit ( так кажись )
обработчик присваивается так же, а объявляется как procedure Edit_OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

кажись все
dyr_farot вне форума  
Старый 16.03.2005, 01:13     # 8
bloodman
Junior Member
 
Регистрация: 15.04.2004
Сообщения: 69

bloodman Путь к славе только начался
Создание 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....)
и так далее.
Для более конкретного ответа нужно больше данных. Хотя, в принципе, я тебе все, чтобы ты смог сделать сказал.Тебе только нужно оформить как тебе нужно.
bloodman вне форума  
Старый 16.03.2005, 08:19     # 9
Al-x
Junior Member
 
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
Лучше не создавать статический массив Edito'ов, а создавать их динамически и пихать ссылки на них в TList (как предложил IGaDI, только с Edit'ами вместо checkbox'ов - принципиальной разницы в этом смысле нет ). А события OnEnter (да и любые другие) привязываются как у bloodman.
ЗЫ: Если не разберёшься - вечерком покажу как
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981.
Все "спасибо" в репутацию

Последний раз редактировалось Al-x; 16.03.2005 в 08:22.
Al-x вне форума  
Старый 16.03.2005, 19:30     # 10
Al-x
Junior Member
 
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
Переделал твой проект - добавил кнопку и динамический список Смотри вложение.
Вложения
Тип файла: zip Edit_my.zip (6.3 Кбайт, 3 просмотров - Кто скачивал? )
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981.
Все "спасибо" в репутацию
Al-x вне форума  
Старый 16.03.2005, 22:37     # 11
KsarDoS
Guest
 
Сообщения: n/a

Все Ок. Я еще все таки написал компонент. Так препод попросил. И теперь, благодаря Al-x у меня генереться мои личные Едиты... Щаз еще напишу Сохранение координат в .ини и можно сказать - полноценный квик-репорт Кстати, если вызвать метод form1.print, с какими настройками форма будет печататься? И можно как нибудь эти параметры изменить..?

З.ы.
 

Опции темы

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

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 16:37.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.