喫茶XRAYトップページ

[スレッド全体
]

[6336] 火猿ミニテスト 1返信 削除
2012/9/9 (日) 14:53:26 Mr.XRAY
火猿,FMX, FireMonkey はやらないといいましたが,
ちょっとしたテスト
最近UPまたは更新したサンプルに関係したやつで,
テキスト文書の中に画像を表示するものです.

下の図は,設計時に画像を埋め込んでいます.
TImageControl の親を TMemo としています.
もちろん,スクロールも同時にします.保存も可能です.
VCL では,面倒くさいインターフェイスを実装する必要がありましたが,
非常に簡単に実現できます.
テキストの回りこみの制御はしていません.

//==================================================================
//  TMemoの内容をディスクに保存
//==================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  AStream : TMemoryStream;
begin
  AStream := TMemoryStream.Create;
  try
    Memo1.SaveToStream(AStream);
    AStream.Position := 0;
    AStream.SaveToFile('Test.stm');
  finally
    AStream.Free;
  end;
end;

//==================================================================
//  TMemoの内容をクリア
//==================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
  ImageControl1.Free;
  ImageControl1 := nil;
  Memo1.Lines.Clear;
end;

//==================================================================
//  TMemoの内容をディスクから読み込んで表示
//==================================================================
procedure TForm1.Button3Click(Sender: TObject);
var
  AStream : TMemoryStream;
begin
  if Assigned(ImageControl1) then exit;
 
  AStream := TMemoryStream.Create;
  try
    AStream.LoadFromFile('Test.stm');
    AStream.Position := 0;
    Memo1.LoadFromStream(AStream);
  finally
    AStream.Free;
  end;
end;

EXEの作成は,Windows 7 U64(SP1) + Delphi XE2(UP4)

[6337] Re:火猿ミニテスト 2返信 削除
2012/9/9 (日) 15:01:02 Mr.XRAY
最近 UP した画像,図形の移動リサイズも簡単にできます.
下の図では,TImage とTSelection を使用しています.
左は,TSelection に TImage を子コントロールにしたものです.
このままだとラバーバンドが見えなくなってしまうので,
右では,親子関係にはしないで,実行時に移動リサイズしたものです.
したがって,こちらは少しコーディングが必要ですが,簡単なコードで
済みます.

参考のため,EXEファイルだけUPしておきます.
http://mrxray.on.coocan.jp/Delphi/zipothers/FireMonkeyTest.zip

//==================================================================
//  ラバーバンドとグラブハンドルをTImageの上に表示するために親子関係
//  にはしていない
//  そこで,実行時に位置とサイズを合わせる
//==================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  Selection2Resize(nil);
end;

//==================================================================
//  移動時には,位置たけ合わせる
//==================================================================
procedure TForm1.Selection2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Single);
begin
  Image2.Position.X := Selection2.Position.X;
  Image2.Position.Y := Selection2.Position.Y;
end;

//==================================================================
//  リサイズ時には,サイズを合わせる
//==================================================================
procedure TForm1.Selection2Resize(Sender: TObject);
begin
  Image2.SetBounds(Selection2.Position.X,
                   Selection2.Position.Y,
                   Selection2.Width,
                   Selection2.Height);
end;

参考
Creating a FireMonkey Primitive Control
http://docwiki.embarcadero.com/RADStudio/en/Creating_a_FireMonkey_Primitive_Control

EXEの作成は,Windows 7 U64(SP1) + Delphi XE2(UP4)

[6338] Re2:火猿ミニテスト 2返信 削除
2012/9/9 (日) 23:09:17 Mr.XRAY
> procedure TForm1.FormCreate(Sender: TObject);
> begin
>   Selection2Resize(nil);
> end;


ん?
これは,どちらかと言えば,Selection2 を Image2 に合わすべき,か?
動作がわかれば,どっちでもいいか?
実際には,TSelection は,必要な時に生成でしょうから.

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