Registriert seit: 26. Mär 2010
254 Beiträge
Delphi XE Enterprise
|
WM_NCCALCSIZE provozieren (Aufteilung NC - Client - Area hat sich geändert)
13. Jul 2010, 08:44
Hallo,
ich habe ein eigenes Control, welches einen eingeschränkten Clientbereich hat. Das Ausmaß der Einschränkung ist vom Caption abhängig. Wenn sich das Caption ändert, muss ich also eine WM_NCCALCSIZE Message provozieren. Ich habe bisher folgenden Code:
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; // Höhe des neuen NC-Bereichs
// 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;
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
|
|
Zitat
|