Форум: "Основная";
Текущий архив: 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