縁なしフォームのサイズを変更しようとしていますが、右側/下部を使用してサイズを大きくすると、マウスを動かす速度に応じて、境界と古いクライアント領域の間に隙間ができます。
左の境界線または左下隅からサイズを変更すると、効果がより顕著になります。どこでもひどいものです (他の商用アプリで試してみましたが、同様に発生します)。この効果は、大きな境界線に変更したときにも発生しますが、フォームの境界線を削除するときほどひどいものではありません
フォーム レイアウトは、タイトル バー機能を実行するトップ パネル (いくつかの tImage とボタンを含む) と、その他の情報 (メモ、その他のコントロールなど) を表示するその他のパネルで構成されます。
マウスボタンをキャプチャしてウィンドウにメッセージを送信するコードの一部がありますが、同様の結果で手動で実行しようとしました
トップ パネルのダブル バッファをアクティブにすると、ちらつきが回避されますが、パネルのサイズ変更はフォームのサイズ変更と同期されないため、ギャップが表示されたり、パネルの一部が消えたりします。
procedure TOutputForm.ApplicationEvents1Message( var Msg: tagMSG;
var Handled: Boolean );
const
BorderBuffer = 5;
var
X, Y: Integer;
ClientPoint: TPoint;
direction: integer;
begin
Handled := false;
case Msg.message of
WM_LBUTTONDOWN:
begin
if fResizable then
begin
if fSides = [sTop] then
direction := 3
else if fSides = [sLeft] then
direction := 1
else if fSides = [sBottom] then
direction := 6
else if fSides = [sRight] then
direction := 2
else if fSides = [sRight, sTop] then
direction := 5
else if fSides = [sLeft, sTop] then
direction := 4
else if fSides = [sLeft, sBottom] then
direction := 7
else if fSides = [sRight, sBottom] then
direction := 8;
ReleaseCapture;
SendMessage( Handle, WM_SYSCOMMAND, ( 61440 + direction ), 0 );
Handled := true;
end;
end;
WM_MOUSEMOVE:
begin
// Checks the borders and sets fResizable to true if it's in a "border"
// ...
end; // mousemove
end; // case
end;
その領域を回避したり、ウィンドウを強制的に再描画するにはどうすればよいですか? 私はDelphiを使用していますが、一般的な解決策(または他の言語で)または前進する方向性でさえも問題ありません
前もって感謝します