Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Вниз

Не могу создать TabControl, WinApi   Найти похожие ветки 

 
Arazel ©   (2006-03-21 11:35) [0]

Не создается и все  Что я не так сделал?  

program TabControl;

uses
 windows,
 messages,
 commctrl;

var
  ScrWidth          : integer;
  ScrHeight         : integer;  

  pTabControlProc   : Pointer;
  hTabControl       : THandle;

procedure SetTrans(h:hwnd;procent:integer);
var
 old: longint;
begin
old:=GetWindowLongA(h,GWL_EXSTYLE);
 if procent>0 then begin

   SetWindowLongA(h,GWL_EXSTYLE,old or WS_EX_LAYERED);
   SetLayeredWindowAttributes(h, 0, procent, LWA_ALPHA);
 end else SetWindowLongA(h,GWL_EXSTYLE,old xor WS_EX_LAYERED);
end;

procedure HideTaskBarButton(hWindow: HWND);
var
wndTemp: HWND;
begin
wndTemp := CreateWindow("STATIC", "", WS_POPUP, 0, 0, 0, 0, 0, 0, 0, nil);
ShowWindow(hWindow, SW_HIDE);
SetWindowLong(hWindow, GWL_HWNDPARENT, wndTemp);
ShowWindow(hWindow, SW_SHOW);
end;

function TopPosition(hWin: HWND; Top: Boolean): BOOL;
var
Regim: Integer;
begin
if Top
 then Regim := HWND_TOPMOST
 else Regim := HWND_NOTOPMOST;
Result := SetWindowPos(hWin, Regim, 0, 0, 0, 0,SWP_NOMOVE or SWP_NOSIZE);
end;

function TabCtrlSubclassProc(hWnd:HWND; Msg : Integer; wParam: WPARAM; lParam: LPARAM):LRESULT; stdcall;
var
  hControlDC   : HDC;
  hMemoryDC    : HDC;
  rc           : TRECT;  // Для определения размеров окна
  hBmp         : HBITMAP; // Битмап для двойной буферизации
  hSave        : HGDIOBJ; // Оригинальный битмап из hMemoryDC
begin
{case msg of

WM_ERASEBKGND: Result:=1;
WM_PAINT:
       begin
       // Чтобы поменьше генерилось WM_ERASEBKGND, сэкономим время на
       // диспетчеризации сообщений.
      ValidateRect (hWnd, nil);
      GetClientRect (hWnd, rc); // TabControl не использует non-client area
      hControlDC := GetDC (hWnd);
      hMemoryDC := CreateCompatibleDC (hControlDC);
      hBmp := CreateCompatibleBitmap (hControlDC, rc.right, rc.bottom);
      hSave := SelectObject (hMemoryDC, hBMp);
      // Очистим буфер-битмап, зальём его фоном
      CallWindowProc (pTabControlProc, hWnd, WM_ERASEBKGND, hMemoryDC, 0);
      // Прорисуем контрол в битмапе
      CallWindowProc (pTabControlProc, hWnd, WM_PRINTCLIENT, hMemoryDC, PRF_CLIENT);
      // Ну и нарисуем контрол на дисплее
      BitBlt (hControlDC, 0, 0, rc.right, rc.bottom, hMemoryDC, 0, 0, SRCCOPY);
      DeleteObject (SelectObject (hMemoryDC, hSave));
      DeleteDC (hMemoryDC);
      ReleaseDC (hWnd, hControlDC);
      result := 0;
    end;
end;     }
Result:=CallWindowProc (pTabControlProc, hWnd, Msg, wParam, lParam);
end;

function WindowProc(wnd:HWND; Msg : Integer; wParam: WPARAM; lParam: LPARAM):LRESULT; stdcall;
begin
case msg of
 WM_NCHITTEST:  result := HTCAPTION;
 WM_COMMAND :
             begin
               case LoWord(wParam) of
                 IDCANCEL : DestroyWindow(wnd);
               end;
               result := 0;
             end;

 WM_DESTROY :
             begin
               PostQuitMessage(0);
               Result:=0;
             end;

 else Result:=DefWindowProc(wnd,msg,wParam,lParam);
end;
 TopPosition(wnd, True);
end;//of WindowProc

var
  w,h               : DWORD;
  R                 : TRect;
  tie               : TTCITEM;
  WndClassEx        : TWndClassEx;
  Handle            : HWND;
  Msg               : TMsg;

begin
  ScrWidth:=GetSystemMetrics (SM_CXSCREEN);
  ScrHeight:=GetSystemMetrics (SM_CYSCREEN);

  WndClassEx.cbSize:=sizeof(WndClassEx);
  WndClassEx.style:=CS_HREDRAW or CS_VREDRAW;
  WndClassEx.lpfnWndProc:=@WindowProc;
  WndClassEx.cbClsExtra:=0;
  WndClassEx.cbWndExtra:=0;
  WndClassEx.hInstance:=hInstance;
  WndClassEx.hIcon:=LoadIcon(0,IDI_APPLICATION);
  WndClassEx.hCursor:=LoadCursor(0,IDC_ARROW);
  WndClassEx.hbrBackground:=COLOR_BTNFACE+1;
  WndClassEx.lpszMenuName:=nil;
  WndClassEx.lpszClassName:="Class";
  RegisterClassEx(WndClassEx);

  Handle:= CreateWindowEx(WS_EX_DLGMODALFRAME,"Class", "Name", WS_POPUP or WS_VISIBLE or WS_BORDER,
  10, 10, 300, 100,0, 0,hInstance,nil);

  GetClientRect(Handle, r);
  hTabControl:=CreateWindow(WC_TABCONTROL,nil,
  WS_CHILD or WS_CLIPSIBLINGS or WS_VISIBLE,
  0, 20, 400, 40,Handle,100, hInstance, nil);

  if(hTabControl <> 0) Then
  pTabControlProc:=Pointer(SetWindowLong(hTabControl, GWL_WNDPROC,Integer(@TabCtrlSubclassProc)));
  with tie do
    begin
      mask := TCIF_TEXT or TCIF_IMAGE;
      iImage := -1;
        pszText := "ID0"; SendMessage(hTabControl, TCM_INSERTITEM, integer(0), Longint(@tie));
        pszText := "ID1"; SendMessage(hTabControl, TCM_INSERTITEM, integer(1), Longint(@tie));
        pszText := "ID2"; SendMessage(hTabControl, TCM_INSERTITEM, integer(2), Longint(@tie));
    end;

  HideTaskBarButton(Handle);
  SetTrans(Handle,230);
  ShowWindow(Handle,SW_SHOW);
  UpdateWindow(Handle);

  While GetMessage(Msg,0,0,0) do begin
  if Handle<>0 then
  if IsDialogMessage(Handle,Msg) then continue;
 TranslateMessage(Msg);
 DispatchMessage(Msg);
end;
end.


 
clickmaker ©   (2006-03-21 11:39) [1]

InitCommonControls()



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.01 c
3-1145623187
AndreyAR
2006-04-21 16:39
2006.06.18
Программный запуск DTS Package


1-1145964438
Alexandr
2006-04-25 15:27
2006.06.18
новая страница word


11-1128890490
DillerXX
2005-10-10 00:41
2006.06.18
Центр экрана


15-1148510953
Копир
2006-05-25 02:49
2006.06.18
Уважаемые господа, владельцы телефонов Siemens


2-1149192556
Mr tray
2006-06-02 00:09
2006.06.18
сообщение, узнающее координаты выделенного текста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский