Registriert seit: 26. Mär 2010
254 Beiträge
Delphi XE Enterprise
|
AW: WM_NCCALCSIZE provozieren (Aufteilung NC - Client - Area hat sich geändert)
13. Jul 2010, 13:14
Ich habe die Lösung gefunden:
Delphi-Quellcode:
procedure SetHTMLCaptionHeight( const AValue: Integer);
procedure WMNCCalcSize( var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
procedure WMNCPaint( var Message: TWMNCPaint); message WM_NCPAINT;
procedure TCustomChoiceGroup.SetHTMLCaptionHeight( const AValue: Integer);
begin
if HTMLCaptionHeight = AValue then
Exit;
FHTMLCaptionHeight := AValue;
if not (csLoading in ComponentState) then // sonst ist Handle noch nicht gültig
SetWindowPos( Handle,0,0,0,0,0, // das löst WM_NCCALCSIZE und WM_NCPAINT aus
SWP_FRAMECHANGED or SWP_NOCOPYBITS or SWP_NOMOVE or
SWP_NOOWNERZORDER or SWP_NOSENDCHANGING or SWP_NOSIZE or
SWP_NOZORDER);
end;
procedure TCustomChoiceGroup.WMNCCalcSize( var Message: TWMNCCalcSize);
begin
Inc( Message.CalcSize_Params^.rgrc[0].Top,HTMLCaptionHeight);
inherited;
end;
procedure TCustomChoiceGroup.WMNCPaint( var Message: TWMNCPaint);
var
DC: HDC;
c: TCanvas;
r: TRect;
begin
c := TCanvas.Create;
try
DC := GetWindowDC( Handle);
try
c.Handle := DC;
c.Brush.Color := Color;
r := c.ClipRect;
r.Bottom := HTMLCaptionHeight;
c.FillRect(r);
HTMLDraw(c,r,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
|