喫茶XRAYトップページ


[10997] TSplitterをタッチ操作で動かしたい・・・返信 削除
2017/3/31 (金) 22:20:31 Sara
みなさん こんばんわ。

最近Windowsタブレットを手に入れたので、自作のソフトを入れて

動かしたところ、TSplitterがタッチ操作で動かしづらい・・・

うまく動くこともあれば、何度やっても動かないことも・・・


例えば、マスター作のTplExplorerFolderTree(alLeft)をFormの左端に置き、

次にTSplitterを配置、さらにTShListView(alClient)などを配置して

実行時にTplExplorerFolderTreeの幅を変えたいという場合、

マウス操作であれば、何事もなくTSplitterをドラッグすればOKですが、

Windowsタブレットでタッチ操作で行う場合一般的には

どのような方法になるのでしょうか?(プログラム的に)

TShListViewのOnGestureで無理やりTShListViewの幅を変えれば見栄えはともかく

目的は達成されますが・・・できれば、Splitterをタッチ操作で動かしたい。

なにか良い方法はありませんでしょうか?



[10998] Re:TSplitterをタッチ操作で動かしたい・・・返信 削除
2017/4/1 (土) 08:30:21 Mr.XRAY
▼ Saraさんどうも.

> 目的は達成されますが・・・できれば、Splitterをタッチ操作で動かしたい。

なるほど,たしかに TSplitter には OnGesture ないですね.
う〜ん,どうやんでしょう.
TControl には FOnGesture があるので何か実装方法があるのかも.


[11019] Re2:TSplitterをタッチ操作で動かしたい・・・返信 削除
2017/4/3 (月) 23:53:26 Sara
▼ Mr.XRAYさん どもです

> なるほど,たしかに TSplitter には OnGesture ないですね.
> う〜ん,どうやんでしょう.
> TControl には FOnGesture があるので何か実装方法があるのかも.


いろいろ、調べたところ、RegisterTouchWindowとWM_TOUCHで根本的に
対応したほうがよさげですね・・・
(そもそも、TSplitterだけでなく、Formのリサイズすらうまくできないし)
(マウスドラッグによる範囲選択とかデータのD&Dとかも・・・)


しかし、開発で使っているPCにはタッチ対応のモニターが付いていないので、
まったくうまくいかない・・・
(実行はタブレットでやってるのにWM_TOUCHが返ってこない)

なにか基本的に足らないところか、勘違いしているところがあるんでしょう・・

まぁ、もうしばらくしたら、マルチタッチ液晶(中古)が手に入りそうなので、

それまで、見なかったことにしよう・・・

それまで、
http://ht-deko.com/ft1105.html
で勉強します。あぁ リモートデバッグという手も…まんどくさいな・・・

進展があったら、また来ます・・・(^^;


[11020] Re3:TSplitterをタッチ操作で動かしたい・・・返信 削除
2017/4/4 (火) 08:33:47 Mr.XRAY
▼ Saraさん

私も実機を持っていないので,確認できないです.ハイ.
実機がないとヤル気もでないし (^^;


[11059] Re:TSplitterをタッチ操作で動かしたい・・・返信 削除
2017/4/8 (土) 18:15:22 taka
▼ Saraさん
> 目的は達成されますが・・・できれば、Splitterをタッチ操作で動かしたい。
>
> なにか良い方法はありませんでしょうか?
>


ヘルプを見ると
Vcl.Controls.TControl.OnGesture にハンドラがあるので

フリー版なのでソースコードがないので実態がわかりませんが、
非表示になっているだけですので
イベントを手動で代入して、ジェスチャーに反応するか試してみましたか?

  published
    procedure Splitter1Gesture(Sender: TObject;
                             const EventInfo: TGestureEventInfo; var Handled: Boolean);

procedure TForm1.FormCreate(Sender: TObject);
begin
  Splitter1.OnGesture := Splitter1Gesture;
end;

procedure TForm1.Splitter1Gesture(Sender: TObject;
  const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
  // コード
  // showmesageとかなにかいれれば、反応をみれるかも?
end;


[11097] Re2:TSplitterをタッチ操作で動かしたい・・・返信 削除
2017/4/13 (木) 22:53:59 Sara
▼ takaさん

こんばんは。 ありがとうございます。

> ヘルプを見ると
> Vcl.Controls.TControl.OnGesture にハンドラがあるので
>
> フリー版なのでソースコードがないので実態がわかりませんが、
> 非表示になっているだけですので
> イベントを手動で代入して、ジェスチャーに反応するか試してみましたか?
>
>   published
>     procedure Splitter1Gesture(Sender: TObject;
>                              const EventInfo: TGestureEventInfo; var Handled: Boolean);
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
>   Splitter1.OnGesture := Splitter1Gesture;
> end;
>
> procedure TForm1.Splitter1Gesture(Sender: TObject;
>   const EventInfo: TGestureEventInfo; var Handled: Boolean);
> begin
>   // コード
>   // showmesageとかなにかいれれば、反応をみれるかも?
> end;


これは、試していません。

ただ、実際にタブレットで使ってみると、Windows10のExplorerがタッチで
Splitter以外の部分で自由自在(?)にサイズ変更等ができるのですが、
その使用感に合わせようとすると、Splitterではなく、TreeViewやListview
のスクロールバー付近等で反応するようにしないといけないかなと・・・
となると、ジェスチャーでは厳しそうなのですよね・・・

なので、WM_TOUCHを駆使して各コンポーネントの座標をもとに動作するように
したほうがよさげと言う・・・めんどくさそうですが・・・

でも、まぁ せっかく情報を頂けたので、WM_TOUCHを試す前に試してみます。
(もっとも、Splitterの幅的な問題で、ジェスチャーが反応しない可能性が・・・
 Splitterの幅をスクロールバー程度まで太くすればいけるか?
 ダメもとでスクロールバー以上の幅にしたときもSplitterは上手く
 動かなかったんですよね・・・(^^; )

INCM/CMT
Cyclamen v3.82