Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-21322
DarkSide
2002-08-14 15:27
2002.10.07
Как спрятать taskbar?


14-21205
Mike B.
2002-09-11 11:56
2002.10.07
Тяжела и неказиста жизнь простого программиста :-)


14-21214
Lord Warlock
2002-09-11 14:38
2002.10.07
Как программно создать ODBC DSN


6-21181
Pavel2002
2002-07-08 22:45
2002.10.07
Как с сервака клиенту послать комманду на выключения компа???


4-21307
DenVeR75
2002-08-20 13:08
2002.10.07
Меню Пуск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский