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."