Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Внизмассив и компоненты приложения Найти похожие ветки
← →
olevacho_ © (2005-06-30 21:23) [0]Не знаю смогу ли объяснить точно что мне нужно. Есть в приложении 10 таймеров Timer1:TTimer , Timer2:Ttimer ... Timer10: TTimer - стандартные компоненты. Нужно создать массив ссылок на эти компоненты так чтобы при обращении к какому-то елементу массива реально обращаться к существующему таймеру. Например если нужно включить 5 таймер то не писать Timer5.enabled:=true; а сделать это обращением к пятому елементу массива? Продемонстрируйте пожалуйста на конкретном примере.
← →
begin...end © (2005-06-30 21:26) [1]var
i: Integer;
Timers: array [1..10] of TTimer;
begin
for i := Low(Timers) to High(Timers) do
Timers[i] := TTimer.Create(Application)
end.
← →
Просто Джо © (2005-06-30 21:27) [2]type
TTimers = array [1..10] of TTimer;
....
в приватной секции формы
FTimers: TTimers;
...
При создании формы
FTimers[1] := Timer1;
FTimers[2] := Timer2;
etc
...
Используешь
← →
Alexander Panov © (2005-06-30 21:28) [3]var
TimerArray: Array[1..10] of TTimer;
...
TimerArray[1] := Timer1;
..
TimerArray[10] := Timer10;
...
TimerArray[10].Enabled := False;
← →
-=XP=- © (2005-06-30 22:14) [4]Ну, еще и я напишу:
TMyForm = class(TForm)
<...>
private
function GetTimer(iIndex: integer): TTimer;
public
property Timer[iIndex: integer]: TTimer read GetTimer;
end;
<...>
function TMyForm.GetTimer(iIndex: integer): TTimer;
begin
Result := TTimer(FindComponent("Timer" + IntToStr(iIndex)));
if (Result = nil) then
raise Exception.Create("Timer not found."#13"Index: " + iIndex);
end;
P.S. Набирал прямо тут - могут быть очепятки.
← →
deamon_t (2005-06-30 23:07) [5]Так будет удобнее если таймеры уже на форме есть
var x:array [0..9] of ^TTimer; //Создаёшь массив указателей на тип TTimer
begin
//Тута их инициализируешь
x[0]:=@Timer1;
x[1]:=@Timer2;
end;
← →
Плохиш © (2005-06-30 23:34) [6]
> deamon_t (30.06.05 23:07) [5]
TTimer уже указатель.
← →
deamon_t (2005-07-01 00:14) [7]А вот такой вопрос немного не по теме? Все экземпляры класса указатели? А что происходит здесь?
------------------------------------
var
TimerArray: Array[1..10] of TTimer;
...
TimerArray[1] := Timer1;
------------------------------------
TimerArray[1] это указатель, и ему просто присваиваеться адресс уже проинициализированной структуры или экземпляр класса побайтово копируеться? Можно с примерами оба варианта плиз...
ЗЫ Блин скока вопросов выдал... :-)
← →
Плохиш © (2005-07-01 00:18) [8]
> deamon_t (01.07.05 00:14) [7]
Присваивается указатель
а в [5] присваивается указатель на указатель
← →
Digitman © (2005-07-01 10:16) [9]
> olevacho_
и зачем ты засандалил столько таймеров ?)
вполне и одним м.б. обойтись.
← →
Tor © (2005-07-01 10:20) [10]рас уж десять таймеров то луче компоненты не юзать а юзать через апи. Дофига получается таймеров, приложение не тормозит? :)
← →
Anatoly Podgoretsky © (2005-07-01 10:22) [11]Tor © (01.07.05 10:20) [10]
А почему должно тормозить, какие к этому основания, с ДОС не путаешь?
← →
Tor © (2005-07-01 10:38) [12]Anatoly Podgoretsky ©
смотря через какое время таймеры срабатывают. винде и так есть что делать, а тут еще и таймеры прилогаются. Может гораздо проще в одельном патоке все это юзать. смотря что за прога.
← →
evvcom © (2005-07-01 10:47) [13]
> смотря через какое время таймеры срабатывают. винде и так
> есть что делать, а тут еще и таймеры прилогаются.
Таймеры на скорость работы винды никак не должны повлиять. Тут дело в другом. Ресурсы экономить надо.
← →
evvcom © (2005-07-01 10:48) [14]
> то луче компоненты не юзать а юзать через апи
А разница-то какая?
← →
Tor © (2005-07-01 11:08) [15]evvcom ©
тем что TTimer тянет за собой vcl, на скорость винды нет, а на скорость проги да.
TTimer и так через апи сделан тока гораздо усложнен, исходники погляди.
← →
BiN © (2005-07-01 11:24) [16]По поводу тормозов и т.д.:
10 VCL-таймеров - это 10 дополнительных окон + 10 ядерных объектов timer.
← →
Tor © (2005-07-01 11:30) [17]> BiN © круто сказал :)))
сори за офтоп
← →
evvcom © (2005-07-01 13:02) [18]
> тем что TTimer тянет за собой vcl, на скорость винды нет,
> а на скорость проги да.
Не такой уж и большой этот VCL. И как же этот VCL влияет на скорость проги? Ты через него пароль из миллиардов комбинаций подбираешь или выполняешь раз в секунду/минуту/десять и т.п. килобайт кода? Это ж каким таким образом ты должен уловить миллионную долю секунды разницы в скорости выполнения этих двух вариантов?
> 10 VCL-таймеров - это 10 дополнительных окон + 10 ядерных
> объектов timer
Согласен. Только если автору не жаль лишних 9 ядерных объектов timer, то чего уж тут экономить на окнах?
← →
GrayFace © (2005-07-01 13:29) [19]olevacho_ © (30.06.05 21:23)
Есть в приложении 10 таймеров
Мне уже страшно! Как представлю, что на 10 TPUtilWindow станет больше...
evvcom © (01.07.05 13:02) [18]
Только если автору не жаль лишних 9 ядерных объектов timer, то чего уж тут экономить на окнах?
Неужели объекты Timer весят больше, чем окна?
← →
evvcom © (2005-07-01 13:45) [20]
> Неужели объекты Timer весят больше, чем окна?
А кто говорил про "вес"?
Если изначально к вопросу подходить так, что ресурсы винды неограничены, то пофиг сколько там окон создастся и сколько таймеров ядреных, и пофиг сколько это будет на "вес" (ресурсы же не ограничены). А если же все таки бережно относиться к ресурсам, то надо экономить и на таймерах ядра, поскольку ошибка системы, говорящая об исчерпании ресурса таймеров, куда страшнее, чем своп на винт куска памяти из-за "большого веса" того или иного окна.
← →
Faraday (2005-07-01 13:52) [21]Если используется графика (анимация, например), то лучше API конечно, а если обновлять таблицы БД, то сойдут и стандартные.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.036 c