[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]

    {
    michael a vincze

    Below I have re-written your Paint method.  It is commented where I made the
    changes. Get in touch with me if you have any questions.
    }

    procedure TNumConWindow.Paint(PaintDC : HDC; var PaintInfo : TPaintStruct);
    var
      X, Y    : Integer;
      WRect   : TRect;
      DeltaX,
      DeltaY,
      XSize,
      YSize   : Integer;
      Perc    : Real;
      Str     : string;
      PC      : PChar;
      PCP     : Integer;
      SaveBK  : LongInt;
      ThePen  : HPen;
      TheBrush: HBrush;
      TheRect : TRect;

    const
      CP       = 1;
      NumLic   = 64;
      MaxCount = 6;
      Count    : array [1..MaxCount] of Integer = (2, 4, 8, 16, 32, 64);
      OutStr   : string = 'Hello Allen E. Stoner ';

    begin
      GetClientRect(HWindow, WRect);
      XSize := WRect.Right - WRect.Left;
      YSize := WRect.Bottom - WRect.Top - 40;

      Perc   := YSize / (NumLic * 1.05);
      DeltaY := Round(Perc * 10);

      { Draw fat line at bottom of graph.  The color is the system default. }
      MoveTo(PaintDC, 0, YSize);
      LineTo(PaintDC, XSize, YSize);
      MoveTo(PaintDC, 0, YSize + 1);
      LineTo(PaintDC, XSize, YSize + 1);
      MoveTo(PaintDC, 0, YSize + 2);
      LineTo(PaintDC, XSize, YSize + 2);

      { Draw horizontal lines.  The color is the system default. }
      Y := YSize;
      while Y > 0 do
      begin
        Rectangle(PaintDC, 0, Y, XSize, Y - DeltaY);
        Y := Y - (DeltaY * 2);
      end;

      { Fill in rectangle at bottom yellow.  This is the same size as WRect
        except the top is at YSize + 3. }
      TheBrush := CreateSolidBrush(RGB($FF, $FF, $00));
      CopyRect(TheRect, WRect);
      TheRect.Top := YSize + 3;
      FillRect(PaintDC, TheRect, TheBrush);

      { Draw vertical lines red. If you wanted to, you could draw rectangles
        instead of lines. Notice how I've selected a width of 4 for ThePen.
        You could also have a different color for each "bar" by having X index
        into an array of TColorRefs and changing ThePen for each new value of X.}
      ThePen := CreatePen(PS_SOLID, 4, RGB($FF, $00, $00));
      SelectObject(PaintDC, ThePen);
      for X := 1 to MaxCount do
      begin
        MoveTo(PaintDC, X * 10, YSize);
        LineTo(PaintDC, X * 10, Round(YSize - (Count[X] * Perc)));
      end;

      if CP = 1 then
        PCP := 300
      else
        PCP := CP - 1;
      PC := @OutStr[1];

      { Set the color of the text.  Note GetSysColor is used merely as an example.
        Don't forget that the background of the text must also be colored.  This
        color should be yellow, as in TheBrush, however a different color was
        selected for illustration purposes.  Alternatively SetBkMode() could
        be used }
      SetTextColor(PaintDC, GetSysColor(COLOR_HIGHLIGHT));
      SetBkColor(PaintDC, RGB($00, $FF, $FF));
      { Use SetBkMode () instead of SetBkColor () to see what happens.
        SetBkMode (PaintDC, TRANSPARENT); }

      TextOut(PaintDC, 10, YSize+15, PC, Length(OutStr)-1);

      { Don't forget to delete the selected objects. }
      DeleteObject(ThePen);
      DeleteObject(TheBrush);
    end;

[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]