Einzelnen Beitrag anzeigen

RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#12

AW: Clientbereich eines eigenen Controls beschränken

  Alt 12. Jul 2010, 17:31
Hm, mit Align zu arbeiten wäre eine einfachere Möglichkeit gewesen, aber jetzt bin ich fast am Ziel Ich habe folgendes programmiert:
Delphi-Quellcode:
    ...
    procedure SetHTMLCaptionHeight(const AValue: Integer); // löst alles aus

    procedure WMNCCalcSize(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
    procedure WMNCPaint(var Message: TWMNCPaint); message WM_NCPAINT;
    property HTMLCaptionHeight: Integer read FHTMLCaptionHeight write SetHTMLCaptionHeight;
    ...

procedure TCustomChoiceGroup.SetHTMLCaptionHeight(const AValue: Integer);
begin
  if FHTMLCaptionHeight = AValue then
    Exit;
  FHTMLCaptionHeight := AValue;
  // hier Win über notwendiges Resize informieren... wie?
end;

procedure TCustomChoiceGroup.WMNCCalcSize(var Message: TWMNCCalcSize);
begin // das muss nach SetHTMLCaptionHeight aufgerufen werden
  with Message.CalcSize_Params^ do
    Inc(rgrc[0].Top,FHTMLCaptionHeight); // Einschränkung des ClientRect
  inherited;
end;

procedure TCustomChoiceGroup.WMNCPaint(var Message: TWMNCPaint);
var
  DC: HDC;
  c: TCanvas;
begin // TCustomChoiceGroup.Canvas ist nur für den Client-Bereich
  c := TCanvas.Create;
  try
    DC := GetWindowDC(Handle);
    try
      c.Handle := DC;
      c.Brush.Color := Color;
      c.FillRect(Rect(0,0,Width,FHTMLCaptionHeight));
      HTMLDraw(c,Rect(0,0,Width,FHTMLCaptionHeight),HTMLCaption,False);
    finally
      ReleaseDC(Handle, DC);
    end;
  finally
    c.free;
  end;
  Message.Result := 0;
end;
Mit InvalidateRect kann ich Neuzeichnen initiieren, aber was muss ich für eine Message verschicken, damit ich WM_NCCALCSIZE zurückbekomme? Die ganzen VCL-Lösungen beziehen sich offenbar auf die Client-Area.

Edit:
Da sich die restliche Frage mehr auf die WinAPI bezieht, werde ich den Rest mal im entsprechenden Forum zu Ende führen:
http://www.delphipraxis.net/152921-w...geaendert.html
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."

Geändert von RSE (13. Jul 2010 um 09:29 Uhr)
  Mit Zitat antworten Zitat