喫茶XRAYトップページ

[スレッド全体
]

[6477] Re3:移動リサイズコンポーネント返信 削除
2012/10/23 (火) 20:30:25 Mr.XRAY
確かに「列」の左が少し欠けていますね.
これ,多分フォントの問題のようですね.

http://mrxray.on.coocan.jp/Delphi/plSamples/172_MetaFile_BasicTest.htm#fig3

当方も Windows XP(SP3) ですが発生していなようですので,
Windows のアップデートの内容によるのかも知れません.

>> (2) 回転などの機能はない
>回転は欲しいです


これは,移動リサイズコンポとは別に作成しなければならないので
パスですね (^^; スんません.

>意味がよく理解できないのですが、規則にそったコンポーネントを
>作成すれば、線や○を追加できるということでしょうか。


です.例えば角が丸い四角形は以下のようになっています.
変数類の説明は省略します.
DrawRoutine というメソッドをオーバーライドした描画コードを作成する
ことになります.

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  plDragResize, Menus, Math;

type
  TplResizeRoundRect = class(TplResizeBaseControl)
  private
    FRoundSize : Integer;
  public
    constructor Create(AOwner: TComponent); override;
    procedure DrawRoutine(ACanvas: TCanvas; OffSetX: Integer=0;
      OffSetY: Integer=0); override;
  published
    property RoundSize : Integer read FRoundSize write FRoundSize;
  end;

{ TplResizeRoundRect }

//-----------------------------------------------------------------------------
//  Create処理
//  角の丸部分のサイズの初期値を設定
//-----------------------------------------------------------------------------
constructor TplResizeRoundRect.Create(AOwner: TComponent);
begin
  inherited;
  FRoundSize := 35;
end;

//-----------------------------------------------------------------------------
//  実際の描画処理を実行するDrawRoutineメソッド
//  Signの使用には,usesにMathが必要
//-----------------------------------------------------------------------------
procedure TplResizeRoundRect.DrawRoutine(ACanvas: TCanvas; OffSetX: Integer=0;
  OffSetY: Integer=0);
var
  ARect   : TRect;
  ALeft   : Integer;
  ATop    : Integer;
  AWidth  : Integer;
  AHeight : Integer;
begin
  inherited;

  OffSetX := Sign(Width)  * OffSetX;
  OffSetY := Sign(Height) * OffSetY;

  ARect := ClientRect;
  OffsetRect(ARect, OffSetX, OffSetY);

  ACanvas.Pen   := Pen;
  ACanvas.Brush := Brush;

  ALeft   := Pen.Width div 2 + OffSetX;
  ATop    := Pen.Width div 2 + OffSetY;
  AWidth  := Width  - Pen.Width + 1;
  AHeight := Height - Pen.Width + 1;
  if Pen.Width = 0 then begin
    Dec(AWidth);
    Dec(AHeight);
  end;
  ACanvas.RoundRect(ALeft, ATop, ALeft + AWidth, ATop + AHeight,
                    FRoundSize, FRoundSize);
end;

end.




[6478] Re4:移動リサイズコンポーネント返信 削除
2012/10/23 (火) 21:03:22 snail3
▼ Mr.XRAYさん

>確かに「列」の左が少し欠けていますね.
>これ,多分フォントの問題のようですね.


よくわかっていませんが幅の計算が違うように思います。


> >> (2) 回転などの機能はない
> >回転は欲しいです
>
> これは,移動リサイズコンポとは別に作成しなければならないので
> パスですね (^^; スんません.


アップしてあるGDI+サンプルの矢印は回転できますが、
同じようにはできないということですか。




[6479] Re5:移動リサイズコンポーネント返信 削除
2012/10/23 (火) 21:16:20 Mr.XRAY
▼ snail3さん

> よくわかっていませんが幅の計算が違うように思います。

そうなんです.これは直せます.

> アップしてあるGDI+サンプルの矢印は回転できますが、
> 同じようにはできないということですか。


矢印は回転ではなく,ある点からある点までの描画なので
文字の場合は,よくある回転の描画をすることになるんですが.
ラバーバンドとグラブハンドルも制御しないとダメなんですよねー.

機能的には実装したいですが,コンポを作り直す気力ないてす.
キッパリ(笑)


[6481] 文字列の回転返信 削除
2012/10/23 (火) 21:27:11 Mr.XRAY
参考までに,

[フォントの横倍と方向]
http://mrxray.on.coocan.jp/Halbow/Notes/N003.html

[Delphi] GDI+ Text Rotation (1)]
http://blog.livedoor.jp/junki560/archives/24342422.html


[6482] Re6:移動リサイズコンポーネント返信 削除
2012/10/24 (水) 00:39:18 snail3
▼ Mr.XRAYさん
>
> 機能的には実装したいですが,コンポを作り直す気力ないてす.


私には知力がありません。(T_T)



[6485] Re7:移動リサイズコンポーネント返信 削除
2012/10/24 (水) 10:48:20 Mr.XRAY
▼ snail3さん

> 私には知力がありません。(T_T)

私にも「知力」はないのですが,「痴力」はあるかも?

またちょっと作り直おそうと思っています.
Delphi 2009 以降専用のコードになっていたので...
でも,もう Delphi 2009 より古いバージョン使っている人いなかも
知れないからいいかも... (^^)


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82