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

Вниз

Проблемы с UpDown   Найти похожие ветки 

 
Darts   (2003-01-13 11:39) [0]

Есть файл ресурсов. Вот состав диалога:

#define ID_EDIT1 4003
#define ID_EDIT2 4004
#define IDC_SPIN1 4006
#define IDC_SPIN2 4007


EDITTEXT ID_EDIT1,40,7,36,11,ES_NUMBER
CONTROL "UpDown1",IDC_SPIN1,"msctls_updown32", UDS_WRAP |
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,76,8,11,11

EDITTEXT ID_EDIT2,40,22,36,11,ES_NUMBER
CONTROL "UpDown2",IDC_SPIN2,"msctls_updown32", UDS_WRAP |
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,76,22,11,11


Диалог открывается. Подготавливаем данные:

WM_INITDIALOG:
begin
// UpDown #1, set range from upper to lower
SendDlgItemMessage(Window, 4006, UDM_SETRANGE, 0, MakeLong(99, 3));
// UpDown #1, accelerators values
aUDACCEL[0].iInc := 2;
aUDACCEL[0].iSec := 0;
SendDlgItemMessage(Window, 4006, UDM_SETACCEL, 1, Longint(@aUDACCEL));
// UpDown #1, set start position
SendDlgItemMessage(Window, 4006, UDM_SETPOS, 0, MakeLong(5, 0));
SendDlgItemMessage(Window, 4001, WM_SETFOCUS, Window, 0);
//SendDlgItemMessage(Window, 4004, WM_SETTEXT, 0, Longint(IntToStr(34)));
.......
end;

Требуется: получить в ID_EDIT1 (который связан с IDC_SPIN1) интервал 3,5,7 и т.д.
К сожалению, ID_EDIT1 показывает только ЦЕЛЫЕ числа. Решил подправить эту
ситуацию.

Итак, я открываю диалог, щелкаю по IDC_SPIN1 и перехватыю от него WM_NOYIFY.

WM_NOTIFY:
begin
case wParam of
// UpDown #1
4006:
begin
CurrentValue := PNMUpDown(lParam)^.iPos + PNMUpDown(lParam)^.iDelta;
//MessageBox(Window, PChar(IntToStr(CurrentValue)), "OldCurrentValue", 0);
//MessageBox(Window, PChar(IntToStr(PNMUpDown(lParam)^.iPos)), "iPos", 0);
//MessageBox(Window, PChar(IntToStr(PNMUpDown(lParam)^.iDelta)), "iDelta", 0);
if (CurrentValue mod 2 = 0) then //begin
Dec(CurrentValue);
// PNMUpDown(lParam)^.iPos := CurrentValue;
//end;
//MessageBox(Window, PChar(IntToStr(CurrentValue)), "NewCurrentValue", 0);
SendDlgItemMessage(Window, 4003, WM_SETTEXT, 0, Longint(IntToStr(CurrentValue)));
end;
end; // case
//MessageBox(Window, PChar(IntToStr(wParam)), "WM_NOTIFY", 0);
end;

Проблема в том, что после SendDlgItemMessage(Window, 4003, WM_SETTEXT, 0, Longint(IntToStr(CurrentValue))),
которое инициирует сообщение WM_SETTEXT и устанавливает правильные данные,
появляется еще одно WM_SETTEXT (появляется всегда, и очевидно, от IDC_EDIT1), которое
устанавливает полученный результат уже ЦЕЛЫМ. Это видно в WinSight.

Если я пошлю SendDlgItemMessage(Window, 4004, WM_SETTEXT, ...),
т.е. я посылаю IDC_EDIT2, то все OK.

Вопросы:
1. Как обойти эту проблему, предложите варианты (сделать сабклассинг для IDC_EDIT1)?
2. Почему итоговое значение ЧЕТНОЕ?

В Delphi то же самое. Можно кинуть Edit1, UpDown1, связать UpDown1 c Edit1, установить
минимум (3), максимум (99), шаг (2) и полюбоваться на результат.


 
Darts   (2003-01-14 11:52) [1]

Up



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

Форум: "WinAPI";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
1-87391
Makhanev A.S.
2003-02-17 01:18
2003.02.27
ActionMainMenuBar...


1-87433
Main.php
2003-02-18 15:54
2003.02.27
Загрузка JPG с диска в DXImageList


1-87425
yaJohn
2003-02-15 15:26
2003.02.27
стандартный способ получить OleVariant в виде бинарных данных


3-87263
KonuhovSegey
2003-02-04 18:19
2003.02.27
Запрос на Update для TIBDataSet


1-87491
vdas2
2003-02-16 03:39
2003.02.27
размер в памяти после запуска?





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