|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 3, 2003 23:38:39 Пакет: Tasm 5.0 Проблема: В ComboBox не вставляется и(или) не отображается строка .... Исходник : (фрагмент с тремя способами ВСТАВЛЕНИЯ в ComboBox) ; ; Способ №1 (Наверно неверный...) ; local @@vrem:DWORD ...... push 101 ; идентификатор ComboBox push @@hdlg ; дескриптор диалога call GetDlgItem ; ... mov @@vrem, eax ; ... push 0 push FALSE push WM_SETREDRAW push @@vrem call SendMessageA push offset kstr ; kstr - глобальная - (kstr db 'Привет',0) push 0 push CB_ADDSTRING push @@vrem call SendMessageA push 0 push TRUE push WM_SETREDRAW push @@vrem call SendMessageA push TRUE push NULL push @@vrem call InvalidateRect ; ; Способ №2 ; push offset kstr push 0 push CB_ADDSTRING push 101 push @@hdlg call SendDlgItemMessageA ; ; Способ №3 ; local @@vrem:DWORD .... push 101 ; идентификатор ComboBox push @@hdlg ; дескриптор диалога call GetDlgItem ; ... mov @@vrem, eax ; ... push offset kstr ; kstr - глобальная - (kstr db 'Привет',0) push 0 push CB_ADDSTRING push @@vrem call SendMessageA ; ; Описание: Диалоговая процедура содержит обработчики двух событий: 1. WM_INITDIALOG - пустое, возвращает 1 2. WM_COMMAND - содержит обработчики: а) IDCANCEL - вызывает EndDialog б) IDOK - содержит Способ №1,№2 и №3, возвращает 1 Больше в диалоговой процедуре ничего нет. Просьба: Поможите кто может .... ;) |
|
|
Дата: Авг 4, 2003 00:31:44 Проверьте, что возвращает GetDlgItem, на первый взгляд всё правильно (говорю только опервом способе т.к. другими не пользовался. Скорей всего GetDlgItem возвращает ошибку (ноль). |
|
|
Дата: Авг 4, 2003 02:17:56 GetDlgItem возвращает в : eax - 00350214 ecx - 00000065 (101) edx - 7FFEFFFF Доп. данные: ОС - Win2000 Мыслишки: может надо какой-то обработчик перерисовки или что-то вроде того.... |
|
|
Дата: Авг 4, 2003 03:03:49 Мыслишки: а может в файле ресурсов чё не так ... DIALOG_1 DIALOGEX 16, 27, 207, 111, 0 STYLE DS_SETFONT | DS_MODALFRAME | 0x4L | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "????? ?????" FONT 8, "MS Sans Serif", 0, FALSE { DEFPUSHBUTTON "???????", IDOK, 148, 6, 50, 14 PUSHBUTTON "??????", IDCANCEL, 148, 24, 50, 14 COMBOBOX IDC_COMBOBOX1, 8, 6, 130, 102, CBS_DROPDOWNLIST | WS_VSCROLL } |
|
|
Дата: Авг 4, 2003 07:21:12 1. Зачем вам нужен WM_SETREDRAW? 2. IDC_COMBOBOX1 == 101? 3. ComboBox вообще появляется в диалоговом окне? |
|
|
Дата: Авг 4, 2003 10:25:14 Kiosun Попробуйте заменить CBS_DROPDOWNLIST на CBS_DROPDOWN. |
|
|
Дата: Авг 4, 2003 11:16:18 Люди, пробуйте пользоваться тегом CODE! |
|
|
Дата: Авг 6, 2003 01:31:06 2 Quantum: 1. WM_SETREDRAW используется просто как один из вариантов 2. IDC_COMBOBOX1 в заголовочном файле ресурса равно 101, а в проге я всё равно пишу цифрами ( push 101 ) 3. Combobox в диалоговом окне появляется пока нормально ... :) 2 pas При замене CBS_DROPDOWNLIST на CBS_DROPDOWN только появляется возможность вводить текст в первой строке Combobox, а в остальном всё также... Заголовочный файл ресурса: const MENU_1 = 1; ..... DIALOG_1 = 1; IDC_COMBOBOX1 = 101; DIALOG_2 = 2; IDC_LISTBOX1 = 101; |
|
|
Дата: Авг 6, 2003 01:57:33 Kiosun Очень странно! Ошибки не вижу. Поделитесь экзешником (прямо сюда в аттаче, если менее 50Кб). Я гляну под отладчиком. |
|
|
Дата: Авг 6, 2003 02:03:03 Пример из моей проги... ...
...
push IDC_NAMELIST
push hDlg
call GetDlgItem
mov hNameList,eax
push offset fName
push 0
push CB_ADDSTRING
push hNameList
call SendMessage
...
...
И все работает... |
|
|
Дата: Авг 6, 2003 05:02:53 2 Quantum Нужный диалог находится в меню Объект->Диск , хотя там трудно будет промахнуться ... :) 2 KiNDeR Как бы я хотел, чтобы у меня етот кусочек кода тоже работал .... _1529468108__KioInetver.EXE |
|
|
Дата: Авг 6, 2003 05:14:53 · Поправил: KiNDeR Kiosun CB_ADDSTRING equ 143h А у тебя какой-то WM_USER+3 да WM_USER+10(или что-то такое), хотя мож я не там смотрел? Но вроде больше похожего кода нет... Вот, потробуй нажать на выбрать и посмотри(если файл прицепится) А что файло не цепляется? |
|
|
Дата: Авг 6, 2003 06:49:12 KiNDeR хотя мож я не там смотрел? Там, конечно. Я даже поменял первый 403h (WM_USER+3) на 143h (CB_ADDSTRING) и всё заработало. Kiosun Поищите объявление константы CB_ADDSTRING и замените на 143h или прямо в коде замените push CB_ADDSTRING на push 323. |
|
|
Дата: Авг 7, 2003 01:41:16 2 KiNDeR и Quantum Спасибо БОЛЬШОЕ за помощь. :) P.S. Дайте пожалуйста ссылочку на свеженький windows.h(.inc) или прикрепите в аттаче если поместится. (To be continue...) |
|
|
Дата: Авг 7, 2003 02:52:44 Kiosun Нету у меня этого зверя... тасмом не балуюсь. ЗЫ: Рекомендую перейти на MASM32 ;-) |