LomaK.XP Опубликовано 16 марта, 2007 Жалоба Поделиться Опубликовано 16 марта, 2007 Есть вопрос по поводу ComboBox в Delphi, при работе на чистом WinAPI. Есть код: program winmin;uses windows,messages;varwc:TWndClassEx;MainWnd,cmb:HWND;Mesg:TMsg;str:string; function WindowProc(wnd:HWND;Msg:Integer;Wparam:Wparam;Lparam:Lparam):Lresult;stdcall; begin if msg=wm_destroy thenbeginpostquitmessage(0);Result:=0;exit;end else Result:=DefWindowProc(wnd,msg,wparam,lparam); end;var xPos,yPos,nWidth,nHeight:Integer;beginwc.cbSize:=sizeof(wc);wc.style:=cs_hredraw or cs_vredraw;wc.lpfnWndProc:=@WindowProc;wc.cbClsExtra:=0;wc.cbWndExtra:=0;wc.hInstance:=HInstance;wc.hIcon:=LoadIcon(0,idi_application);wc.hCursor:=LoadCursor(0,idc_arrow);wc.hbrBackground:=COLOR_BTNFACE+1;wc.lpszMenuName:=nil;wc.lpszClassName:='WinMin:Main';RegisterClassEx(wc);xPos:=1;yPos:=1;nWidth:=260;nHeight:=260;//Создание главного окнаMainWnd:=CreateWindowEx ( WS_EX_APPWINDOW,'WinMin:Main','dynamic form caption', ws_overlappedwindow, xPos,yPos,nWidth,nHeight,0,0, Hinstance,nil );ShowWindow(MainWnd,CmdShow);//Создание comboboxcmb:=CreateWindowEx ( 0,'COMBOBOX','combo caption', WS_CHILD or WS_VISIBLE or WS_TABSTOP or WS_VSCROLL or CBS_DROPDOWN or CBS_HASSTRINGS or CBS_OWNERDRAWFIXED, xPos+10,yPos+20,200,100,MainWnd,0, Hinstance,nil );str:='first';//Добавление элементаSendMessage(cmb,CB_ADDSTRING,0,dword(str));While GetMessage(Mesg,0,0,0) do begin TranslateMessage(Mesg); DispatchMessage(Mesg) endend. Вся фишка в том, что элемент добавляется в Combobox, но его надписи не видно!? :) И при нажатии на него он нормально выделяется, тоесть его текст как и должен вставляется в поле. А если ещё вот так: program winmin;uses windows,messages;varwc:TWndClassEx;MainWnd,cmb:HWND;Mesg:TMsg;str:string; function WindowProc(wnd:HWND;Msg:Integer;Wparam:Wparam;Lparam:Lparam):Lresult;stdcall; begin if msg=wm_destroy thenbeginpostquitmessage(0);Result:=0;exit;end else Result:=DefWindowProc(wnd,msg,wparam,lparam); end;var xPos,yPos,nWidth,nHeight:Integer;beginwc.cbSize:=sizeof(wc);wc.style:=cs_hredraw or cs_vredraw;wc.lpfnWndProc:=@WindowProc;wc.cbClsExtra:=0;wc.cbWndExtra:=0;wc.hInstance:=HInstance;wc.hIcon:=LoadIcon(0,idi_application);wc.hCursor:=LoadCursor(0,idc_arrow);wc.hbrBackground:=COLOR_BTNFACE+1;wc.lpszMenuName:=nil;wc.lpszClassName:='WinMin:Main';RegisterClassEx(wc);xPos:=1;yPos:=1;nWidth:=260;nHeight:=260;MainWnd:=CreateWindowEx ( WS_EX_APPWINDOW,'WinMin:Main','dynamic form caption', ws_overlappedwindow, xPos,yPos,nWidth,nHeight,0,0, Hinstance,nil );ShowWindow(MainWnd,CmdShow);cmb:=CreateWindowEx ( 0,'COMBOBOX','combo caption', WS_CHILD or WS_VISIBLE or WS_TABSTOP or WS_VSCROLL or CBS_DROPDOWNLIST or CBS_HASSTRINGS or CBS_OWNERDRAWFIXED, xPos+10,yPos+20,200,100,MainWnd,0, Hinstance,nil );//изменили свойство CBS_DROPDOWN на CBS_DROPDOWNLISTstr:='first';SendMessage(cmb,CB_ADDSTRING,0,dword(str));While GetMessage(Mesg,0,0,0) do begin TranslateMessage(Mesg); DispatchMessage(Mesg) endend. Тут тоже самое, но ещё к тому же текст не вставляется в поле при нажатии, а должен!? ;) Есть подозрение, что придётся писать CallBack функцию обработки сообщений. Но ведь можно же и без неё! (наверное). Кто знает в чём тут дело помогите, заранее очень признателен. P.S. На других языках под Win32 тоже самое, например MASM. :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти