Задача:Создание динамической формы и всех объектов на ней, по заранее заданным критериям, которые берутся к примеру из файла. т.е. в файле задаем все объекты и их свойства, загружаем в прогу, она создает форму и объекты. с этим особых напрягов нет, в инете полно статей и мануалов. Проблема вот в чем. как динамически создавать события для динамически созданных объектов? В инете нашел только, как прикрутить уже заранее созданное событие к динамически созданному объекту, а если мне нужно что бы код в событии был всегда разным? довольно странно создавать 100 кнопок и использовать для него 1 заранее созданное событие. все 100 кнопок будут делать 1 и ту же функцию(( а если заранее для всех 100 кнопок прописывать событие, то и динамическое создание просто не к чему 0о пример того что нашел в инете: Code: public Buttons: Array[1..5] of TButton; procedure ButtonsDown(Sender: TObject); end; ................................................................. with Buttons[i] do begin .............................................................. onClick:=ButtonsDown; .............................................................. ведь как я понял все 5 кнопок на событие onClick будут реагировать одинаково 0о т.е. если я в процедуру ButtonsDown засуну что то типа ShowMessage('ОЛОЛО'); по нажатию на любую из 5и динамически созданных кнопок будет появлятся мессага "ОЛОЛО" . это как то странно 0о либо я чего то не догнал 0о
Да оно так и будет, ты всем кнопка при событии предлагаеш выполнить одно и тоже. если тебе нужно чтото другое то пиши так with Buttons[1] do begin .................................................. ............ onClick:=ButtonsDown1;
дело немного в другом, я привел просто пример кода, который откопал в инете, там почти везде подобный смысл и в том что ты привел, тот же смысл. в твоих изменениях смысла не много) если 1 динамически созданной кнопке задать 1 заранее заданное событие, то легче кнопку задать заранее, чем ломать голову и создавать ненужные структуры кода, для ее динамического создания. ЗАЧЕМ динамически создавать объект, если события все равно нужно статично прописывать заранее??? какой толк то??? 100 динамически созданных кнопок будут делать 100 ЗАРАНЕЕ заданных процедур(тогда легче будет задать все эти кнопки статично и прописать события отдельно для каждой) или как описывается в большинстве статей 1 заранее заданную процедуру (от чего легче не становиться, зачем нужны 100 динамически созданных кнопок выполняющих одно и тоже?).
Я тогда не понял чего Вы пытаетесь добиться. Вы что хотите и с файла подгружать и процедуру которая должна происходить при определенном событии?
да что то типа этого. на ум пока что идет только задание одного события и выполнение кода по каким то данным извне аля: Code: if id=1 then begin showmessage('ololo'); end else id=2 then begin edit1.text='olololo'; end else и т.д. к примеру если баттон1 то id=1 и будет выполнятся шоумессадж, если баттон2 то в едит запишется "ололо" но это крайний случай(
в этом все и дело( я как мог подробно описал) нужно что бы я мог вне программы задавать кнопки и действия для этой кнопки. кажется кроме как условий нет решения( к примеру я задаю извне, что на форме будет 1 кнопка и 2 едита, а по нажатию на кнопку умножались значения динамически созданных едитов. или мне понадобиться 1 кнопка и 2 едита но уже для деления или вычитания, но что бы действие на кнопку можно было поменять без ковыряния исходников. т.е. к примеру во внешнем файле поменять действие и в программе оно тоже поменяется.
что за бред вы тут развели? Динамическое создание в основном нужно для того, когда ты не знаешь, сколько конкретно будет элементов на твоей форме. И полезли-то в дебри какие-то.
сталкнулся с почти такой же проблемой... есть массив из таймеров Code: tmr: array [0..150] of TTimer; и заранее созданная процедура для события onTimer: Code: procedure TForm1.OnTimer(Sender: TObject); в этой процедуре есть цикл for i:=244 to 245 do //числа 244 и 245 это высота экрана(программа должна найти определенный цвет на экране) begin for j:=250 to 1090 do //ширина экрана ... ... Так же на форме есть 2 кнопки. При нажатии на первую кнопку выполняется вот такой код: Code: for x:= low(tmr) to high(tmr) do begin tmr[x] := TTimer.Create(nil); tmr[x].Interval := 10; tmr[x].OnTimer := OnTimer; tmr[x].Enabled := false; end; при нажатии на вторую, такой: Code: for x:= low(tmr) to high(tmr) do begin tmr[x].Enabled := true; end; так вот при нажатии первой кнопки создаются 150 таймеров и в onTimer прописывается код из моей процедуры, при нажатии второй кнопки таймеры включаются и начинают выполнять процедуру. Теперь суть вопроса: Мне надо чтобы у каждого таймера в событии onTimer была отличная от другого таймера процедура, т.е. Code: [I][U]В первом таймере:[/U][/I] procedure TForm1.OnTimer(Sender: TObject); [B][COLOR=Green]for i:=244 to 245 do[/COLOR][/B] begin for j:=250 to 1090 do [I][U]во втором таймере:[/U][/I] procedure TForm1.OnTimer(Sender: TObject); [B][COLOR=Green]for i:=246 to 247 do[/COLOR][/B] begin for j:=250 to 1090 do [I][U]в третьем таймере:[/U][/I] procedure TForm1.OnTimer(Sender: TObject); [B][COLOR=Green]for i:=248 to 249 do[/COLOR][/B] begin for j:=250 to 1090 do и т.д. как такое организовать???
Vlad3d, ну во-первых не 150 создается, а 151. Во-вторых делаем так : Code: for x:= low(tmr) to high(tmr) do begin tmr[x] := TTimer.Create(nil); tmr[x].Interval := 10; tmr[x].OnTimer := OnTimer; tmr[x].Enabled := false; tmr[x].Tag := i; end; И процедура обработки таймеров будет такой : Code: procedure TForm1.OnTimer(Sender: TObject); Var i, j : Integer; Begin j := TTimer(Sender).Tag; for i:=244+j to 245+j do begin for j:=250 to 1090 do ...
Jingo Bo все бы хорошо, но таймеры работают по очереди...а надо чтобы одновременно(нужно как можно быстрее вычислить координаты определенного цвета на экране)
Таймеры и будут работать по очереди, т.к. они работают через Windows-сообщения. Если тебе нужно одновременно - используй потоки.