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

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

TSpinEdit [D6, Win2k]


arcad ©   (2002-10-09 13:57:00) 

Как к TSpinEdit добавить возможность инкремента/декремента колесом мыши (как в TUpDown).


arcad   (2002-10-10 15:07:00) [1]

Мне кажется я просек в чем фишка:
procedure TCustomUpDownEx.SetMin(Value: Integer);
begin
if Value <> FMin then
begin
FMin := Value;
if HandleAllocated then
SendMessage(Handle, UDM_SETRANGE, 0, MakeLong(FMax,FMin));
end;
end;

procedure TCustomUpDownEx.SetMax(Value: Integer);
begin
if Value <> FMax then
begin
FMax := Value;
if HandleAllocated then
SendMessage(Handle, UDM_SETRANGE, 0, MakeLong(FMax,FMin));
end;
end;
он использует виндовый контрольчик up-down. MakeLond делает четырех байтовое беззнаковое из двух слов, отсюда и тип пределов smallint.
Вот кажется так, только не знаю чем мне это может помочь.


Skier   (2002-10-10 14:44:00) [2]

>arcad
Разумеется. Я так думаю, что ты не везде на Integer
поменял, что-то упустил...


arcad   (2002-10-10 14:05:00) [3]

А можно в отладчике посмотреть как он работает-то? Брекпоинты свои поставить и посмотреть че у него внутри творится?


arcad   (2002-10-10 14:01:00) [4]

Не вышло... Жаль.
Вообщем не то чтобы совсем не вышло...
Короче создал я новый компонент у которого все поля имеют тип Integer, в инспекторе все путем. Устанавливаю Min = -1000000 и Max = 1000000. Запускаю, блин... Работает - минимум = -16960, максимум = 16960...
Откуда вообще такие числа взялись?


arcad   (2002-10-10 13:28:00) [5]

Попробую, правда не уверен что получится, слаб я еще...
А хотелось, так сказать малой кровью.


Skier   (2002-10-10 13:25:00) [6]

>arcad
Вопрос. А зачем такой изврат ? Что тебя в
Skier © (10.10.02 12:56) не устраивает ??


arcad   (2002-10-10 13:21:00) [7]

Вопрос. А могу ли я взять исходник ComCtrls поменять в нем типы нужных мне полей, сделать dcu и заменить существующий ComCtrls.dcu на новый?
И если можно, то как? И чем это чревато?


Skier   (2002-10-10 13:05:00) [8]

>arcad
Угу. Дернуть и изменить под себя.


arcad   (2002-10-10 13:04:00) [9]

И что просто дернуть код из исходника и откоплилить как свой? Так что ли?


Skier   (2002-10-10 12:56:00) [10]

>arcad
Извини ошибся. Тебе конечно же нужно
переделывать под себя TCustomUpDown - в TMyUpDown.


arcad   (2002-10-10 12:51:00) [11]

Че то не получается, TUpDown потомок класса TCustomUpDown, а как я его то изменю?
Я ж не могу весь ComCtrls переделать.
Или я чего-то не понимаю, скорее всего.


arcad   (2002-10-10 12:09:00) [12]

Хорошая мысль!
Щас попробую..


Skier   (2002-10-10 12:07:00) [13]

>arcad
Как вариант :
Возьми код TUpDown и сделай из него TMyUpDown, а
свойства Min и Max сделай Integer или (если мало) Int64


arcad   (2002-10-10 12:02:00) [14]

Может правда обрабатывать сообщение?
Только какое и как я не знаю...
Помогите пожалуйста.


arcad   (2002-10-10 12:00:00) [15]

Подозреваю почему это происходит, у меня в TEdit значение например 100000, а у TUpDown Max имеет тип SmallInt то есть 32767,поэтому он и не прибавляет.
Как бы его обмануть?


arcad   (2002-10-10 11:53:00) [16]

Спасибо, обработчик OnChangingEx работает, но только наполовину,
крутишь колесо вниз - все нормально Direction - updDown, а вот когда крутишь вверх - не работает, Direction - updNone, почему?
Может кто знает?


TTCustomDelphiMaster   (2002-10-09 17:21:00) [17]

Используйте обработчик OnChangingEx

procedure TForm1.UpDown1ChangingEx(Sender: TObject;
var AllowChange: Boolean; NewValue: Smallint;
Direction: TUpDownDirection);
begin
AllowChange := False;
if Direction in [updUp] then
TEdit(UpDown1.Associate).Text := inttostr(StrToIntDef(TEdit(UpDown1.Associate).Text, 0) + 1);
if Direction in [updDown] then
TEdit(UpDown1.Associate).Text := inttostr(StrToIntDef(TEdit(UpDown1.Associate).Text, 0) - 1);
end;

А с колесом он и так у меня работает


arcad   (2002-10-09 17:00:00) [18]

Так я и пользуюсь склеенными TEdit и TUpDown, но дело в том что у TUpDown свойства Min и Max имеют тип SmallInt, а мне требуется вводить числа гораздо большие.


Николай Быков   (2002-10-09 14:59:00) [19]

2 Ангел Б
Лучше бы молчал

2 аркад
Склей TEdit и TUpDown и будет тебе счастье


AngeL B.   (2002-10-09 14:35:00) [20]

1. Написать свой компонент на основе TSpinEdit и добавить туда соответствующие обработчики. Или же переписать существующий, благо он поставляется в исходниках и не является неотемлемой частью VCL (так, пример компонента).

2. Обработать сообщение на форме и если текущий элемент - TSpinEdit, изменить его.

3. Совсем извращенный способ (для особых мазахистов) - написать Hook сообщений :)))

4. Перестать пользоваться TSpinEdit и перейти на что-ниб. более современное, благо выбор огромен.

Выбирай сам.


Наверх

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