お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"サイズ変更ハンドル(2/2)"

この発言は
#01313 アイクビー さんのサイズ変更ハンドル(1/2)
に対するコメントです

// (続き) //********************************************************************** // THControlTool: マウスを押した //********************************************************************** procedure THControlTool.DoMouseDown( fSender: TObject; fButton: TMouseButton; fShift: TShiftState; iX, iY: Integer ); begin if Assigned(FfOnMouseDown) then begin FfOnMouseDown(fSender, fButton, fShift, iX, iY); end; if FfEdit then begin Exit; end; FfEdit := True; try case fButton of mbLeft: begin FfDrag := True; FiX := iX; FiY := iY; if (TComponent(fSender).Tag = 8) then begin HideKnobs(); end; Move(fSender, iX, iY); end; end; finally FfEdit := False; end; end; //********************************************************************** // THControlTool: マウスが移動した //********************************************************************** procedure THControlTool.DoMouseMove( fSender: TObject; fShift: TShiftState; iX, iY: Integer ); begin if Assigned(FfOnMouseMove) then begin FfOnMouseMove(fSender, fShift, iX, iY); end; if FfEdit or not FfDrag then begin Exit; end; FfEdit := True; try Move(fSender, iX, iY); finally FfEdit := False; end; end; //********************************************************************** // THControlTool: マウスを離した //********************************************************************** procedure THControlTool.DoMouseUp( fSender: TObject; fButton: TMouseButton; fShift: TShiftState; iX, iY: Integer ); begin if Assigned(FfOnMouseUp) then begin FfOnMouseUp(fSender, fButton, fShift, iX, iY); end; if FfEdit or not FfDrag then begin Exit; end; FfEdit := True; try Move(fSender, iX, iY); if (TComponent(fSender).Tag = 8) then begin ShowKnobs(); end; with FfHint do begin Height := 0; Left := 0; Top := 0; Width := 0; end; FfDrag := False; finally FfEdit := False; end; end; //********************************************************************** // THControlTool: サイズ変更ハンドルを隠す //********************************************************************** procedure THControlTool.HideKnobs; var i: 0..7; begin for i := 0 to 7 do begin FfKnobs[i].Hide(); end; end; //********************************************************************** // THControlTool: 移動させる //********************************************************************** procedure THControlTool.Move( fSender: TObject; iX, iY: Integer ); const R: array[0..8] of record iL: -1..1; iT: -1..1; iW: -1..1; iH: -1..1; end = ( (iL: 1; iT: 1; iW: -1; iH: -1;), (iL: 0; iT: 1; iW: 1; iH: -1;), (iL: 0; iT: 1; iW: 0; iH: -1;), (iL: 1; iT: 0; iW: -1; iH: 1;), (iL: 0; iT: 0; iW: 1; iH: 1;), (iL: 0; iT: 0; iW: 0; iH: 1;), (iL: 1; iT: 0; iW: -1; iH: 0;), (iL: 0; iT: 0; iW: 1; iH: 0;), (iL: 1; iT: 1; iW: 0; iH: 0;) ); var S: string; begin with FfControl, R[TComponent(fSender).Tag] do begin Left := Left + ((iX - FiX) * iL); Top := Top + ((iY - FiY) * iT); Width := Width + ((iX - FiX) * iW); Height := Height + ((iY - FiY) * iH); end; Left := FfControl.Left - FiMergin; Top := FfControl.Top - FiMergin; Width := FfControl.Width + (FiMergin * 2); Height := FfControl.Height + (FiMergin * 2); if (TComponent(fSender).Tag = 8) then begin S := Format( 'X: %d, Y: %d', [FfControl.Left, FfControl.Top] ); end else begin MoveKnobs(); S := Format( 'W: %d, H: %d', [FfControl.Width, FfControl.Height] ); end; with TControl(fSender).ClientToScreen(Point(iX, iY)) do begin with FfHint.CalcHintRect(100, S, nil) do begin FfHint.Left := X + 9; FfHint.Top := Y - 9; FfHint.Width := Right; FfHint.Height := Bottom; FfHint.Caption := S; end; end; end; //********************************************************************** // THControlTool: サイズ変更ハンドルを表示する //********************************************************************** procedure THControlTool.MoveKnobs; const C: array[0..7] of record iX: 0..2; iY: 0..2; end = ( (iX: 0; iY: 0;), (iX: 2; iY: 0;), (iX: 1; iY: 0;), (iX: 0; iY: 2;), (iX: 2; iY: 2;), (iX: 1; iY: 2;), (iX: 0; iY: 1;), (iX: 2; iY: 1;) ); var i: 0..7; begin for i := 0 to 7 do begin FfKnobs[i].Left := Left - FiSize + FiGap + Trunc((Width - (FiGap * 2) + FiSize - 1) * C[i].iX / 2); FfKnobs[i].Top := Top - FiSize + FiGap + Trunc((Height - (FiGap * 2) + FiSize - 1) * C[i].iY / 2); end; end; //********************************************************************** // THControlTool: コントロールの設定 //********************************************************************** procedure THControlTool.SetControl( V: TControl ); begin FfControl := V; if not Assigned(FfControl) or not Assigned(FfControl.Parent) then begin Visible := False; HideKnobs(); end else begin inherited SetParent(FfControl.Parent); Left := FfControl.Left - FiMergin; Top := FfControl.Top - FiMergin; Width := FfControl.Width + (FiMergin * 2); Height := FfControl.Height + (FiMergin * 2); Visible := True; ShowKnobs(); FfControl.BringToFront(); end; end; //********************************************************************** // THControlTool: 親コントロールの設定 //********************************************************************** procedure THControlTool.SetParent( V: TWinControl ); begin inherited SetParent(V); if Assigned(V) then begin SetControl(nil); end; end; //********************************************************************** // THControlTool: サイズ変更ハンドルを表示する //********************************************************************** procedure THControlTool.ShowKnobs; var i: 0..7; begin MoveKnobs(); for i := 0 to 7 do begin FfKnobs[i].Parent := Parent; FfKnobs[i].Canvas.FillRect(Rect(0, 0, 5, 5)); FfKnobs[i].Show(); end; end; //********************************************************************** // THControlToolKnob: THControlToolのつまみ //********************************************************************** //********************************************************************** // THControlToolKnob: 描画 //********************************************************************** procedure THControlToolKnob.Paint; begin Canvas.FillRect(Rect(0, 0, Width, Height)); end; // (ここまで) アイクビー  - FDELPHI MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 01/04/13 - Original document by アイクビー 氏 ID:(KHB01350)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum