Конференция "WinAPI" » Как изменить вид кнопки Пуск в системе
 
  • Megadeth (30.07.16 15:27) [0]
    Цель изменить кнопку Пуск в панели задач(WIN7, XE8).
    Пытаюсь откомпилировать такой код, но получаю ошибку несовместимости типов NativeUint и Cardinal


    uses
     Windows, SysUtils, MMSystem, Graphics;

    var
     HW : HWND;
     DC : HDC;
     R  : TRect;
     Buffer1 : TBitmap;
     vx : Shortint = 2;
     vy : Shortint = 1;
     x  : Byte = 6;
     y  : Byte = 10;
     ID : Uint;
     h  : THandle;

    {$R *.res}

    procedure TimeProc(uTimerId, uMessage: Uint; dwUser, dw1, dw2: Dword)stdcall;
    begin
     Buffer1.Canvas.Ellipse(x - 3, y - 3, x + 3, y + 3);

     if (x <= 2) or (x >= (R.Right - R.Left - 2)) then vx := -vx;
     if (y <= 2) or (y >= (R.Bottom - R.Top - 2)) then vy := -vy;

     x := x + vx;
     y := y + vy;

     Buffer1.Canvas.Ellipse(x - 3, y - 3, x + 3, y + 3);

     BitBlt(DC,
            0,
            0,
            R.Right - R.Left,
            R.Bottom - R.Top,
            Buffer1.Canvas.Handle,
            0,
            0,
            SRCCOPY);
    end;

    begin
     h := OpenEvent(EVENT_MODIFY_STATE, True, 'puskalka');
     if h <> 0 then
       begin
         SetEvent(h);
         Sleep(300);
         CloseHandle(h);
         Halt;
       end;

     HW := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil);

     GetWindowRect(HW, R);

     DC := GetWindowDC(HW);

     Buffer1 := TBitmap.Create;

     Buffer1.Height := R.Bottom - R.Top;
     Buffer1.Width  := R.Right  - R.Left;
     Buffer1.Canvas.Brush.Color := clBtnFace;
     Buffer1.Canvas.Pen.Color   := clRed;
     buffer1.Canvas.Pen.Mode    := pmXor;
     buffer1.Canvas.Ellipse(x - 3, y - 3, x + 3, y + 3);

    //Вот в этой строке ошибка несоответствия типов
    ID := timeSetEvent(10, 1, Timeproc, 0, TIME_PERIODIC);

     h := CreateEvent(nil, False, False, 'puskalka');

     try
       while WaitForSingleObject(h, 100) = WAIT_TIMEOUT do ;
     finally
       CloseHandle(h);
       timeKillEvent(ID);
       ReleaseDC(HW, DC);
       Buffer1.Free;
     end;
    end.




    Существуют ли ещё какие-то варианты решения данной задачи?

    Спасибо
  • KSergey © (03.08.16 16:11) [1]
    > но получаю ошибку несовместимости типов NativeUint и Cardinal

    ну это-то казалось бы фигня
    На крайняк откастить в нужный тип
  • Megadeth (04.08.16 15:21) [2]
    Фигня фигнёй, но решения то пока нет.
  • sniknik © (04.08.16 18:34) [3]
    > но решения то пока нет.
    > На крайняк откастить в нужный тип
    это и есть решение... одно из, "на крайняк", лучше бы конечно определить переменным сразу правильные типы.
  • NoUser © (04.08.16 21:25) [4]

    // procedure TimeProc(uTimerId, uMessage: Uint; dwUser, dw1, dw2: Dword)stdcall;
    // заменить на
    procedure TimeProc(uTimerId, uMessage: Uint; dwUser, dw1, dw2: Dword_PTR) stdcall;

  • Д7 (12.08.16 22:43) [5]
    Может проще и надёжнее изменить ресурсы системной dll, которая содержит картинку кнопки?
 
Конференция "WinAPI" » Как изменить вид кнопки Пуск в системе
Есть новые Нет новых   [118649   +60][b:0][p:0.002]