home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / windows / gdi / linedda.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-06-04  |  2.2 KB  |  90 lines

  1. PROGRAM TestDDA;
  2.  
  3. {$X+}
  4. USES WinTypes, WinProcs, Strings, OWindows, ODialogs;
  5.  
  6. TYPE
  7.   PGDIFenster = ^TGDIFenster;
  8.   TGDIFenster = OBJECT (tWindow)
  9.     PROCEDURE WMLButtonDown (VAR Msg: tMessage); VIRTUAL wm_First + wm_LButtonDown;
  10.     PROCEDURE WMRButtonDown (VAR Msg: tMessage); VIRTUAL wm_First + wm_RButtonDown;
  11.   END;
  12.  
  13.   TMyApp = OBJECT (tApplication)
  14.     PROCEDURE InitMainWindow; VIRTUAL;
  15.   END;
  16.  
  17. VAR
  18.   MyApp: TMyApp;
  19.   LineProc: tFarProc;
  20.  
  21. PROCEDURE TMyApp.InitMainWindow;
  22. BEGIN
  23.   MainWindow := New (PGDIFenster, Init(NIL, 'GDI Fenster mit LineDDA'));
  24. END;
  25.  
  26. PROCEDURE Line (x1, y1, x2, y2: INTEGER; DC: hDC);
  27. BEGIN
  28.   MoveTo (DC, x1, y1);
  29.   LineTo (DC, x2, y2);
  30. END;
  31.  
  32. CONST
  33.   nCounter: WORD = 0;
  34.  
  35. PROCEDURE LineFunc2 (x,y: INTEGER; lpData: pChar); EXPORT;
  36. BEGIN
  37.   IF (Odd(nCounter)) THEN
  38.     SetPixel (hDC (lpData), x, y, RGB (0,0,0));
  39.   nCounter := (nCounter + 1) MOD 5;
  40. END;
  41.  
  42. PROCEDURE LineFunc (x,y: INTEGER; lpData: pChar); EXPORT;
  43. BEGIN
  44.   IF (nCounter = 2) THEN
  45.     Ellipse (hDC (lpData), x-2, y-2, x+3, y+3);
  46.   nCounter := (nCounter + 1) MOD 4;
  47. END;
  48.  
  49. PROCEDURE TGDIFenster.WMLButtonDown (VAR Msg: tMessage);
  50. VAR
  51.   EinDC: hDC;
  52.   R: tRect;
  53.   xl, xr, yt, yb: INTEGER;
  54. BEGIN
  55.   LineProc := MakeProcInstance (@LineFunc2, hInstance);
  56.   EinDC := GetDC (hWindow);
  57.   GetClientRect (hWindow, R);
  58.   xl := R.Right DIV 4;
  59.   xr := 3 * xl;
  60.   yt := R.Bottom DIV 4;
  61.   yb := 3 * yt;
  62.   LineDDA (xl, yb, xl, yt, LineProc, pChar(EinDC));
  63.   LineDDA (xl, yt, xr, yt, LineProc, pChar(EinDC));
  64.   LineDDA (xl, yb, xr, yb, LineProc, pChar(EinDC));
  65.   LineDDA (xr, yt, xr, yb, LineProc, pChar(EinDC));
  66.   LineDDA (xl, yt, xr, yb, LineProc, pChar(EinDC));
  67.   LineDDA (xr, yt, xl, yb, LineProc, pChar(EinDC));
  68.   {
  69.   Line (xl, yt, xr, yt, EinDC);
  70.   Line (xl, yt, xl, yb, EinDC);
  71.   Line (xl, yb, xr, yb, EinDC);
  72.   Line (xr, yt, xr, yb, EinDC);
  73.   Line (xl, yt, xr, yb, EinDC);
  74.   Line (xr, yt, xl, yb, EinDC);
  75.   }
  76.   ReleaseDC (hWindow, EinDC);
  77.   FreeProcInstance (@LineFunc2);
  78. END;
  79.  
  80. PROCEDURE TGDIFenster.WMRButtonDown (VAR Msg: tMessage);
  81. BEGIN
  82.   InvalidateRect (hWindow, NIL, TRUE);
  83. END;
  84.  
  85. BEGIN
  86.   MyApp.Init ('MyApp');
  87.   MyApp.Run;
  88.   MyApp.Done;
  89. END.
  90.