Der Splitter-Schatten


Zum Abschluss soll noch Eugens Funktion "DrawTrackSplit" genauer unter die Lupe genommen werden, da sie den "Schatten" des Splitters erzeugt.



procedure DrawTrackSplit(const hWnd: HWND; x, y, Width, Height: longint;
  bPattern: boolean = true);
const
  DotBits : array[0..7] of Word =
    ($5555,$AAAA,$5555,$AAAA,$5555,$AAAA,$5555,$AAAA);
var
  dc      : HDC;
  hbr     : HBRUSH;
  bmp     : HBITMAP;
begin

Zuerst benötigen wir ein Handle auf den Device Context des Fensters

  dc      := GetDCEx(hWnd,0,DCX_CACHE or DCX_CLIPSIBLINGS or
    DCX_LOCKWINDOWUPDATE);

Da der Parameter "bPattern" standardmäßig auf true steht, wird die schon erwähnte Schraffur erzeugt. Diese Schraffur ist eine im Speicher erzeugte Bitmap, mit einem Raster, das sich aus dem Array der Konstante "DotBits" zusammensetzt. Würden Sie "bPattern" auf false setzen, würden Sie statt der Schraffur einen schwarzen Strich sehen

  if bPattern then
  begin
    bmp := CreateBitmap(8, 8, 1, 1, @DotBits);
    hbr := SelectObject(dc, CreatePatternBrush(bmp));
    DeleteObject(bmp);
  end;

Mit "PatBlt" wird das Muster nun auf das Fenster gezeichnet. Durch die Verwendung von PATINVERT wird das Muster bei einem nochmaligen Aufruf wieder entfernt.

  PatBlt(dc, x, y, Width, Height, PATINVERT);

Die im Speicher erzeugte Bitmap und das Handle des Device Context müssen noch freigegeben werden

  if bPattern then
    DeleteObject(SelectObject(dc, hbr));
ReleaseDC(hWnd, dc); end;

und das war´s.