Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Глюк UpDown [D5]


kva ©   (2003-01-31 10:54:00) 

Привет всем! Раньше работал со SpinButton, черт дернул переделать прогу на UpDown. Задача такая (в усеченном виде, ес-сно), нужно ограничивать прокручиваемые значения и при попытке выйти за границу выдать сообщение. Бился несколько дней. Проскакивало лишнее событие. Каждый может проверить это. На пустую форму бросьте UpDown и сделайте обработчик на OnChangingEx следующего вида:

procedure TMainForm.UpDown1ChangingEx(Sender: TObject;
var AllowChange: Boolean; NewValue: Smallint;
Direction: TUpDownDirection);
begin
ShowMessage("5555555");
end;

Все. Кликните по Updown и покликайте по форме и затем попытайтесь закончить прогу. Подсказка, вырубайте в среде или попытайтесь открыть системное меню и дважды выбрать пункт закрыть.

Вопрос к мастерам. Чей глюк - Борланда или Билли недобили?
Имхо, Updown надстройка над компонентом MS.
Моих знаний не хватает чтобы разобраться по исходникам VCL


Романов Р.В.   (2003-01-31 12:36:00) [1]

Чесно говоря в исходниках копаться неохота, но могу предположить что при нажатии ЛКМ UpDown захватывает курсор маши. При выводе сообщения фокус изменяется и не происходит освобождения курсора.


kva   (2003-01-31 11:48:00) [2]

>Романов Р.В. © (31.01.03 11:21)
Спасибо, код работает.
Но, проблема у меня не в том, как обойти этот глюк (выкрутиться можно было в конце концов и оставив SpinButton), а в непонимании, что происходит. Почему в моем варианте происходит лишнее событие? Объясните, если можете


Романов Р.В.   (2003-01-31 11:21:00) [3]

Все нормально просто нужно головой маленько думать

const
WU_ErrRange = WM_USER + 301;
type
TForm1 = class(TForm)
UpDown1: TUpDown;
procedure UpDown1Changing(Sender: TObject; var AllowChange: Boolean);
procedure ErrRange(var Msg: TMessage); message WU_ErrRange;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ErrRange(var Msg: TMessage);
begin
ShowMessage("5555555");
end;

procedure TForm1.UpDown1Changing(Sender: TObject;
var AllowChange: Boolean);
begin
PostMessage(Handle, WU_ErrRange, 0, 0);
end;


kva   (2003-01-31 11:19:00) [4]

Ау! Кто с UpDown работал? А может у меня дельфя дырявая?


Наверх

Титульная страница Поиск, карта сайта Написать письмо