· Начало · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› ComboBox - не вставляет ...

. 1 . 2 . >>

Посл.отвђт Сообщен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 ;-)

. 1 . 2 . >>