Кто знаком с MASM-ом наверняка знает, что в папке examples есть пример создания окна MDI Так вот, я решил портировать его в дельфи, но как часто бывает что то не получается на рисунке видно, что у примера на дельфи не видно тулбара и статусбара, хотя они есть помогите понять в чем дело Архив с исходниками (103 кб) http://www.bogdansoftware.narod.ru/MDIDEMO.rar
вобще то тулбар - это дочернее окошко класса WS_EX_TOOLWINDOW , без разницы какого мди или сди. и управляется посылками Код (Text): invoke CreateWindowEx,0,;WS_EX_TOOLWINDOW, addr tbClass,addr szDisplayName, WS_CHILD or WS_VISIBLE or TBSTYLE_TOOLTIPS, 0,60,500,100,hWin,0,hInst,0 mov hToolBar,eax invoke SendMessage,hToolBar,TB_BUTTONSTRUCTSIZE,sizeof TBBUTTON,0 mov ecx,25 mov eax,25 shl eax,16 mov ax,cx mov bSize,eax invoke SendMessage,hToolBar,TB_SETBITMAPSIZE,0,bSize invoke LoadBitmap,hInst,750 mov hTbBmp,eax mov tbab.hInst, 0 push hTbBmp pop tbab.nID invoke SendMessage,hToolBar,TB_ADDBITMAP,12,addr tbab invoke SendMessage,hToolBar,TB_SETBUTTONSIZE,0,bSize mov tbb.fsState,TBSTATE_ENABLED mov tbb.dwData,0 mov tbb.iString,0 mov tbb.iBitmap,0 mov tbb.idCommand,10 mov tbb.fsStyle,TBSTYLE_BUTTON invoke SendMessage,hToolBar,TB_ADDBUTTONS,1,addr tbb mov tbb.iBitmap,1 mov tbb.idCommand,11 mov tbb.fsStyle,TBSTYLE_BUTTON invoke SendMessage,hToolBar,TB_ADDBUTTONS,1,addr tbb mov tbb.iBitmap,2 mov tbb.idCommand,12 mov tbb.fsStyle,TBSTYLE_BUTTON invoke SendMessage,hToolBar,TB_ADDBUTTONS,1,addr tbb mov tbb.iBitmap,3 mov tbb.idCommand,13 mov tbb.fsStyle,TBSTYLE_BUTTON invoke SendMessage,hToolBar,TB_ADDBUTTONS,1,addr tbb вот пример с 4 мя кнопками. а пардон ... там то же самое ... ну мож поможет хоть чуть
Даос забаньте пожалуйста этого гражданина BOGDAN2000 а то я не сдержусь и скажу кто он на самом деле и тогда меня банить придётся
попрошу не выражатся шаблонный проект даже орангутанг делать умеет я просил посмотреть в чем у меня ошибка!
BOGDAN2000 Если WM_SIZE уйдет в DefFrameProc, то MDIClient автоматически ресайзится на всю клиентскую область окна. Код (Text): WM_SIZE: begin SendMessage(hToolBar,TB_AUTOSIZE,0,0); MoveWindow(hStatus,0,0,0,0,TRUE); GetWindowRect(hToolBar,Rct); tbH:=Rct.bottom - Rct.top; GetWindowRect(hStatus,Rct); sbH:=Rct.bottom - Rct.top; GetClientRect(hWin,Rct); sbH:=Rct.bottom-sbH-tbH; MoveWindow(hClient,0,tbH,Rct.right,sbH,TRUE); Exit; { <- !!!} end;
хватает и проще Код (Text): _wm_size: invoke GetClientRect,hWnd,addr Rct invoke MoveWindow,hClient,0,0,Rct.right,Rct.bottom,1 xor eax,eax ret
Geen Ему как раз и не нужно, чтобы MDIClient ресайзился на всю клиентскую область. Тогда он перекрывает тулбар и статусбар. Внимательней читай.