LomaK.XP Posted March 16, 2007 Report Share Posted March 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. :) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now