Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.21;
Скачать: CL | DM;

Вниз

TSpinEdit   Найти похожие ветки 

 
arcad ©   (2002-10-09 13:57) [0]

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


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

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

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

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

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

Выбирай сам.


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

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

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


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

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


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

Используйте обработчик 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-10 11:53) [5]

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


 
arcad ©   (2002-10-10 12:00) [6]

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


 
arcad ©   (2002-10-10 12:02) [7]

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


 
Skier ©   (2002-10-10 12:07) [8]

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


 
arcad ©   (2002-10-10 12:09) [9]

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


 
arcad ©   (2002-10-10 12:51) [10]

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


 
Skier ©   (2002-10-10 12:56) [11]

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


 
arcad ©   (2002-10-10 13:04) [12]

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


 
Skier ©   (2002-10-10 13:05) [13]

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


 
arcad ©   (2002-10-10 13:21) [14]

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


 
Skier ©   (2002-10-10 13:25) [15]

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


 
arcad ©   (2002-10-10 13:28) [16]

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


 
arcad ©   (2002-10-10 14:01) [17]

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


 
arcad ©   (2002-10-10 14:05) [18]

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


 
Skier ©   (2002-10-10 14:44) [19]

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


 
arcad ©   (2002-10-10 15:07) [20]

Мне кажется я просек в чем фишка:
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.
Вот кажется так, только не знаю чем мне это может помочь.



Страницы: 1 вся ветка

Текущий архив: 2002.10.21;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
14-68997
Карлсон
2002-09-29 20:32
2002.10.21
как устроен скандиск?


14-69005
Shadow
2002-09-26 16:01
2002.10.21
А правда, что программисты вспыльчивые люди?


3-68609
cherepovets
2002-09-28 16:06
2002.10.21
Calc поле


7-69034
Dmitry Raduzhan
2002-08-14 10:05
2002.10.21
таймер (вероятно к Ученик)


6-68886
Dzam
2002-08-17 19:20
2002.10.21
IP