Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
14-69023
Андреев Павел
2002-09-30 14:40
2002.10.21
Редактор отчетов


1-68777
Chlavik
2002-10-11 17:45
2002.10.21
Обьявление функции.....


4-69072
Mic_2000
2002-09-08 14:14
2002.10.21
RAS


3-68632
Leviathan
2002-09-27 12:30
2002.10.21
*.gdb


14-68913
der
2002-09-26 14:34
2002.10.21
Бухгалтеру надо в Экселе вставить автоматом сумму на странице





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский