Formの上にEditコンポーネントを置いて、
Formの大きさをEditと同じ大きさにして、
FormのBorderStyleをbsNoneに設定してプログラムを
実行すると、Editだけ(のようにみえる)のウィンドウができますよね?
それをドラッグするにはどうすればいいでしょうか。
タイトルバーがあるとできるんですが・・・。
解決策をご存知の方、よろしくお願いいたします。
ごめんなさい。今は…。
http://www.google.com/search?q=%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%83%90%E3%83%BC%E4%BB%A5%E5%A4%96%E3%82%92%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0&sourceid=opera&num=100&ie=utf-8&oe=utf-8
この辺りにあるかも。
確かもっと楽な方法があったような気がしますけどねぇ…。
眠いー。
こちらのサイトの「Delphi」→「過去のTips集」→「DelphiによるWin32API」→
「マウス」→「マウス操作でウインドウを移動する」で、出来ますが。
情報ありがとうございます。
検索かけてもこれだ、というのがなかったので困っていましたが、
調べるのが足りなかったようです。お騒がせ致しました。
解決済みとしてしまったのですが、たびたびすいません。
もしOnMouseDownイベントを持たないコンポーネントの場合で
この方法を実現しようと思ったらどうなるでしょうか。
WM_MOUSEDOWNなどのメッセージで実現できます。
procedure WMMouseDown(var Message: TMessage); message WM_MOUSEDOWN;
という定義です。クラスのメンバ関数に定義してください。
# プロシージャは適当。メッセージはデフォルトはこれ。messageの次にメッセージID。
もしかしたら、WM_MOUSEDOWNというメッセージがないかもしれませんが、文法はこんな感じ、ということで。
この関数の定義はクラスのメンバ関数ということで、
フォームにこのメソッドを追加するのはできるのですが、
type
TForm1 = class(TForm)
protected
procedure WMMouseDown(var Msg: TMessage); message WM_LBUTTONDOWN;
end;
OnMouseDownイベントを持たないコンポーネント
(例えばComboBoxとかScroolBarとか)にこのメソッドを追加するには
どういう記述にすればよいのでしょうか・・・
TComboBoxを親とした子クラスを作成して、そのクラスにこのメソッドを
追加すればいいような気がするのですが、よくわからず・・・
何度もご迷惑をおかけしますが、よろしくお願いします。
一日中悩んでます・・・
子クラスを作りたくないのであれば、WindowProcプロパティに、同様のプロシージャを代入してやればOKです。
type
TForm1 = class(TForm)
private
OldWndProc: TWndMethod;
procedure ComboBoxWindowMessage(var Msg: TMessage);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
OldWndProc := ComboBox1.WindowProc;
ComboBox1.WindowProc := ComboBoxWindowMessage;
end;
procedure TForm1.ComboBoxWindowMessage(var Msg: TMessage);
begin
if Msg.Message = WM_MOUSEDOWN then
begin
{ WM_MOUSEDOWNの処理を書く }
end
else
begin
OldWndProc(Message); { デフォルトの処理 }
end;
end;
ただし、上の例の場合、ComboBox1に対してWindowProcを保存しているので、ComboBox2も同じように設定するには、ComboBox1.WindowProcとComboBox2.WindowProcをどう保存するか考えないといけません。
継承したクラスならば、WindowProcの初期値がWndProcなので、保存する必要はありません。継承していない場合は、WndProcがProtectedな関数なため、アクセスできないので保存する必要があります。
詳しい解説どうもすいませんでした。
なんとか動作しました^^;
これで頑張ってみます。
ありがとうございました!