MDI (MASM -> Delphi)

Тема в разделе "WASM.BEGINNERS", создана пользователем BOGDAN2000, 19 сен 2007.

  1. BOGDAN2000

    BOGDAN2000 New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    4
    Кто знаком с MASM-ом наверняка знает, что в папке examples есть пример создания окна MDI
    Так вот, я решил портировать его в дельфи, но как часто бывает что то не получается
    на рисунке видно, что у примера на дельфи не видно тулбара и статусбара, хотя они есть
    помогите понять в чем дело
    [​IMG]
    Архив с исходниками (103 кб) http://www.bogdansoftware.narod.ru/MDIDEMO.rar
     
  2. Geen

    Geen New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2007
    Сообщения:
    51
    вобще то тулбар - это дочернее окошко класса WS_EX_TOOLWINDOW , без разницы какого мди или сди. и управляется посылками

    Код (Text):
    1.             invoke  CreateWindowEx,0,;WS_EX_TOOLWINDOW,
    2.                 addr tbClass,addr szDisplayName,
    3.                 WS_CHILD or WS_VISIBLE or TBSTYLE_TOOLTIPS,
    4.                 0,60,500,100,hWin,0,hInst,0
    5.             mov hToolBar,eax
    6.             invoke  SendMessage,hToolBar,TB_BUTTONSTRUCTSIZE,sizeof TBBUTTON,0
    7.             mov ecx,25
    8.             mov eax,25
    9.             shl eax,16
    10.             mov ax,cx
    11.             mov bSize,eax
    12.             invoke  SendMessage,hToolBar,TB_SETBITMAPSIZE,0,bSize
    13.             invoke  LoadBitmap,hInst,750
    14.             mov hTbBmp,eax
    15.             mov tbab.hInst, 0
    16.             push    hTbBmp
    17.             pop tbab.nID
    18.             invoke  SendMessage,hToolBar,TB_ADDBITMAP,12,addr tbab
    19.             invoke  SendMessage,hToolBar,TB_SETBUTTONSIZE,0,bSize
    20.             mov tbb.fsState,TBSTATE_ENABLED
    21.             mov tbb.dwData,0
    22.             mov tbb.iString,0
    23.             mov tbb.iBitmap,0
    24.             mov tbb.idCommand,10
    25.             mov tbb.fsStyle,TBSTYLE_BUTTON
    26.             invoke  SendMessage,hToolBar,TB_ADDBUTTONS,1,addr tbb
    27.             mov tbb.iBitmap,1
    28.             mov tbb.idCommand,11
    29.             mov tbb.fsStyle,TBSTYLE_BUTTON
    30.             invoke  SendMessage,hToolBar,TB_ADDBUTTONS,1,addr tbb
    31.             mov tbb.iBitmap,2
    32.             mov tbb.idCommand,12
    33.             mov tbb.fsStyle,TBSTYLE_BUTTON
    34.             invoke  SendMessage,hToolBar,TB_ADDBUTTONS,1,addr tbb
    35.             mov tbb.iBitmap,3
    36.             mov tbb.idCommand,13  
    37.             mov tbb.fsStyle,TBSTYLE_BUTTON
    38.             invoke  SendMessage,hToolBar,TB_ADDBUTTONS,1,addr tbb
    вот пример с 4 мя кнопками.
    а пардон ... там то же самое ... ну мож поможет хоть чуть
     
  3. BOGDAN2000

    BOGDAN2000 New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    4
    хаха никто незнает=)
    разве вы программеры?
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Слыш ВЫСКАЧКА...
    Создай в дельфи шаблонный проект MDI и сравнивай со своим дерьмом:)
     
  5. vortx64

    vortx64 New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2007
    Сообщения:
    6
    тебе тут никто не обязан помогать
     
  6. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Даос
    забаньте пожалуйста этого гражданина BOGDAN2000
    а то я не сдержусь и скажу кто он на самом деле
    и тогда меня банить придётся:dntknw:
     
  7. BOGDAN2000

    BOGDAN2000 New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    4
    попрошу не выражатся
    шаблонный проект даже орангутанг делать умеет
    я просил посмотреть в чем у меня ошибка!
     
  8. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    BOGDAN2000
    Если WM_SIZE уйдет в DefFrameProc, то MDIClient автоматически ресайзится на всю клиентскую область окна.

    Код (Text):
    1.     WM_SIZE:
    2.     begin
    3.       SendMessage(hToolBar,TB_AUTOSIZE,0,0);
    4.       MoveWindow(hStatus,0,0,0,0,TRUE);
    5.       GetWindowRect(hToolBar,Rct);
    6.       tbH:=Rct.bottom - Rct.top;
    7.       GetWindowRect(hStatus,Rct);
    8.       sbH:=Rct.bottom - Rct.top;
    9.       GetClientRect(hWin,Rct);
    10.       sbH:=Rct.bottom-sbH-tbH;
    11.       MoveWindow(hClient,0,tbH,Rct.right,sbH,TRUE);
    12.       Exit; { <- !!!}
    13.     end;
     
  9. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    BOGDAN2000, в DNA :))
     
  10. BOGDAN2000

    BOGDAN2000 New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    4
    rmn thnx, помогло
    досадно, спотыкался об такую малость =)
     
  11. Geen

    Geen New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2007
    Сообщения:
    51
    хватает и проще
    Код (Text):
    1. _wm_size:       invoke  GetClientRect,hWnd,addr Rct
    2.         invoke  MoveWindow,hClient,0,0,Rct.right,Rct.bottom,1
    3.         xor eax,eax
    4.         ret
     
  12. Geen

    Geen New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2007
    Сообщения:
    51
    прикинь ... предоставил всего лишь шаблон ...
    в шаблоне сайз как правило описан.
     
  13. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    Geen
    Ему как раз и не нужно, чтобы MDIClient ресайзился на всю клиентскую область. Тогда он перекрывает тулбар и статусбар. Внимательней читай.