Форум: "Основная";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
ВнизПроблема с TUpDown Найти похожие ветки
← →
Babay_S (2002-09-27 11:29) [0]Доброго времени суток уважаемые!
Помогогите, я просто горю.
Проблема:
Использую стандартный компонент TUpDown (кнопочки верх вниз). На событие Changing пишу вот такой код.
procedure TForm1.UpDown1Changing(Sender: TObject;
var AllowChange: Boolean);
Var i:Integer;
begin
// вот здеся имитируем кучу всяких вычислений
for i:=0 to 1000 do begin
label1.caption:=inttostr(Random(10000));
application.ProcessMessages;
end;
end;
После отработки программа перестает реагировать на мышку.
Вернее щелчок в любом месте приводит к нажатию одной из кнопок TUpDown в зависимости от того где находится мышка выше или ниже. Причем программу даже закрыть нельзя!
Если убрать application.ProcessMessages то все работает нормально. но мне надо что бы программа не висла пока происходят вычисления!!
Засунуть вычисления в отдельный поток неимеется возможности :=((#
Кто нибудь знает как с этим бороться? все мои попытки оказались тщетными.
Сторонние компоненты не предлогать!!!
← →
Smithson (2002-09-27 11:33) [1]Все очень просто -
OnChanging occurs both when the user clicks the arrow buttons of the up-down control and when an attempt is made to change the value of Position programmatically. To determine which button the user clicked, use the OnChangingEx event or the OnClick event, both of which follow the OnChanging event.
Другими словами, OnChanging происходит ВО-ВРЕМЯ изменения (между нажатием и отпусканием мыши). Надо ловить OnClick
← →
Babay_S (2002-09-27 11:55) [2]При onClick таже беда. :=((#
Пропадает это только когда при щелканье Position достигает задонного min/max.
Попробуйте мой код что я предложил на пустом приложении вы увидите глюк воочию.
Вусьма занимательно.
Кстати на RxSpinEdit так же.....
← →
Smithson (2002-09-27 12:05) [3]Ты будешь смеятся - твоя ошибка не воспроизводится.
Delphi 5.5, WinXP, PIV-1800.
но некий глюк есть - порой при щелчке на кнопке значение меняется не на один шаг, а на два.
← →
TTCustomDelphiMaster (2002-09-27 12:19) [4]Выполняйте вычисления в onMouseUp
или сделайте так
const
WM_CALC = WM_USER + 1;
type
TForm1 = class(TForm)
...
procedure WMCalc(var Msg: TMessage); message WM_CALC;
...
procedure TForm1.WMCalc(var Msg: TMessage);
Var i:Integer;
begin
for i:=0 to 10000 do begin
label1.caption:=inttostr(Random(10000));
application.ProcessMessages;
end;
end;
procedure TForm1.UpDown1Changing(Sender: TObject;
var AllowChange: Boolean);
begin
PostMessage(Handle, WM_CALC, 0, 0);
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c