الفريق العربي للهندسة العكسية
Delphi - Dead TV Effect - نسخة قابلة للطباعة

+- الفريق العربي للهندسة العكسية (https://www.at4re.net/f)
+-- قسم : منتديات البرمجة - Programming Forums (https://www.at4re.net/f/forum-5.html)
+--- قسم : البرمجة بلغة باسكال و الدلفي - Pascal & Delphi (https://www.at4re.net/f/forum-18.html)
+--- الموضوع : Delphi - Dead TV Effect (/thread-447.html)



Delphi - Dead TV Effect - M!X0R - 16-12-2018

المشاركة الأصلية كتبت بواسطة Sn!per X‏, يوم 23-11-2015 على الساعة 09:46 
 (*
  Project: Dead TV Effect
  Original C++ Source: http://www.up.poznan.pl/~rjk/pages/ozdgk/3_4.html
  Ported to Delphi by: Sn!per X ^ AT4RE
  Code Type: Delphi / WinAPI
  Release Date: 2015-11-22
*)


program DeadTVEffect;


uses Windows, Messages;


const
  g_strKlasaOkna = 'deadtveffect_window';
  ZMIENNOSC = 2500;


var
  g_hdcOkno: HDC; // uchwyt kontekstu urzadzenia okna
  rcObszarKlienta: TRECT;


procedure Pracuj();
var
  ptPiksel: TPOINT;
  byOdcien: BYTE;
  i: Integer;
begin
  // wybieramy pewna ilosc pikseli i zmieniamy ich kolory
  i := 0;
  while i < ZMIENNOSC do
  begin
    Inc(i);
    // losujemy wspَlrzedne zmienianego piksela
    ptPiksel.x := Random(rcObszarKlienta.right);
    ptPiksel.y := Random(rcObszarKlienta.bottom);


    // losujemy odcien szarosci
    byOdcien := Random(256);
    // zmieniamy piksel
    SetPixelV(g_hdcOkno, ptPiksel.x, ptPiksel.y, RGB(byOdcien, byOdcien,
      byOdcien));
  end;
end;


function WindowEventProc(hWnd, uMsg: Longint; wParam: WPARAM; lParam: LPARAM):
  Longint; stdcall;
begin
  Result := 0;
  case uMsg of
    WM_TIMER:
      begin
        Pracuj();
        Result := 0;
      end;


    WM_DESTROY:
      begin
        KillTimer(hWnd, 0);
        PostQuitMessage(0);
        Result := 0;
      end;
  end;
  Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
end;




var
  KlasaOkna: WNDCLASSEX;
  hOkno: HWND;
  msgKomunikat: MSG;
begin
  ZeroMemory(@KlasaOkna, sizeof(WNDCLASSEX));
  KlasaOkna.cbSize := sizeof(WNDCLASSEX);
  KlasaOkna.hInstance := hInstance;
  KlasaOkna.lpfnWndProc := @WindowEventProc;
  KlasaOkna.lpszClassName := g_strKlasaOkna;
  KlasaOkna.hCursor := LoadCursor(0, IDC_ARROW);
  KlasaOkna.hIcon := LoadIcon(0, IDI_APPLICATION);
  KlasaOkna.hbrBackground := GetStockObject(WHITE_BRUSH);
  KlasaOkna.style := CS_OWNDC // wlasny kontekst urzadzenia okna
  or CS_HREDRAW or CS_VREDRAW;


  // rejestrujemy klase okna
  RegisterClassEx(KlasaOkna);


  hOkno := CreateWindow(
    g_strKlasaOkna,
    'Dead TV Effect',
    WS_SYSMENU or WS_CAPTION or WS_BORDER or WS_OVERLAPPED or WS_VISIBLE or
      WS_MINIMIZEBOX,
    CW_USEDEFAULT,
    0,
    320 + 2,
    200 + 16 + 2,
    0,
    0,
    hInstance,
    0);
  GetClientRect(hOkno, rcObszarKlienta);
  ShowWindow(hOkno, SW_SHOW);
  UpdateWindow(hOkno);


  g_hdcOkno := GetDC(hOkno);


  // ustawiamy mu elastyczny pedzel
  DeleteObject(SelectObject(g_hdcOkno, GetStockObject(DC_BRUSH)));
  SetTimer(hOkno, 1, 40, nil);


  while (GetMessage(msgKomunikat, 0, 0, 0)) do
  begin
    TranslateMessage(msgKomunikat);
    DispatchMessage(msgKomunikat);
  end;
end.