mouse_evenで マウスを 移動したり、クリックしたりできる。
マウスが移動するので、どうしても言うこと聞かないソフトを
自動でクリックさせるのに便利。
応用すると、マウス移動→クリック→入力などを ユーザーが操作したように
再現させることができる。
function Mouse_PositionTomouse_event_Point(APoint : TPoint) : TPoint;
var
R :TRect;
begin
if Not Windows.GetWindowRect(GetDesktopWindow,R) then
Result := Point(0,0)
else
begin
Result.X := Trunc(($FFFF)*(APoint.X/(R.Right-R.Left)));
Result.Y := Trunc(($FFFF)*(APoint.Y/(R.Bottom-R.Top)));
end;
end;
これは、独自関数。MOUSEEVENTF_ABSOLUTEのとき座標系が違うので変換。
迷惑な仕様だ・・・・
名前が長すぎるのでシンプルにしたいところ・・・・
ClickPt := Mouse_PositionTomouse_event_Point(Point(
100 , 200 ));
操作例
mouse_event(MOUSEEVENTF_MOVE+MOUSEEVENTF_ABSOLUTE
,ClickPt.X,ClickPt.Y,0,0);
mouse_event(MOUSEEVENTF_LEFTDOWN,ClickPt.X,ClickPt.Y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP ,ClickPt.X,ClickPt.Y,0,0);
ついでに文字出力
procedure SendString(Text : String);
var
A_WMChar : TWMChar;
i : integer;
begin
for i := 1 to Length(Text) do
begin
Application.ProcessMessages;
A_WMChar.CharCode := Ord(Text[i]);
A_WMChar.KeyData := 1;
SendMessage(AHandle,WM_CHAR,A_WMChar.CharCode,A_WMChar.KeyData) ;
end;
end;
この方法は、ユーザーの操作で影響を受けるので
普通に、アプリにイベントを送りには、別のやり方が有効。
・PasDoc SJIS対応版+PasDoc GUI
説明書: SupportedTags 、 WritingDocumentation
構文:
修正:R1 (0.8.8j)の場合
といった形で動作を指定できるみたいです。
()をつけりるとエラーおこすみたい
といった形で動作を指定できるみたいです。
デフォルトではついていないので(Javadocスタイル?)、公式サイトでは、:がついていたりする。
今回は 普通のコメントと区別するために ! を使おうと思います
{! }みたいな感じです
()をいれていなかったので、warningがでて1時間苦戦しました。
このユニットは・・・
)
@created (2005-05-02)
}
unit taRvJpMemo;
出力結果は、きれいだけど
・・・・・ 図がグラフになっていない
対応言語:
, C#, D , IDL (Corba and Microsoft flavors)
フォルダ:日本語フォルダ不可・・・
使い方
http://www.hexe19.net/doxygen/quickstart-delphi.html
http://www.fides.dti.ne.jp/~oka-t/doxygen.html
http://members.at.infoseek.co.jp/sakura_editor/comment-rule.html
サンプルを見る限りきれい。みやすい。
が・・・・操作が面倒
っていうか 日本語フォルダをつかえないので選択肢から除外。
http://dephicodetodoc.sourceforge.net/
考察
1)どちらにするか・・・・かなり悩む・・・
- C#で書き出すことを考えると・・・doxygenにしたほうがいいけど
C#のユニット作ってないのでまぁいいとしよう。CなんかMOに眠ったままだし。 - と思っていたけど
- doxygenを試すと日本語フォルダを認識しないので使えない。 ソースを英語フォルダにコピーして実行してみたが、 上のサイトのような物は表示されなかった。 ファイル名がでる程度・・・・
設定ファイルを見る限り
TStringListのValueを使えば簡単に変更できるので設定ツールを作る手もあるがばかばかしくて作る気はおきない。 どこか探せばおちているだろうし
PasDoc にしたんだけど、 Type a= (v);
のときに @valueをしてみたが出力できない
vの前にコメントを貼ればできるが。。。
後方にコメントして、説明にできるタグはないのかな・・・・と思う
こちらはこちらで 不具合が。。。
でも、 お手軽
(編集: R2 (0.8.8.3j) 2005-06-14をいれるとできました。
でも、今度はクラス階層が変。継承しているのに同じ段になった・・・)
どちらにしても
自分用の作って
テンプレートをCTRL+J に登録して使うといい
() 構文がきかなくなったのが困りものだが・・・
テンプレート集
?
?
?
サンプルコード
function SetIE_AutoFill(vDoccument:Variant;
ValueLists : TStrings ; vMode : integer
) : boolean;
// vMode : 0 : ID, 1 : Name , そのた:ID
var i : Integer;
v_Items : Variant;
vRet : boolean;
begin
vRet := False;
Result := vRet;
if VarIsClear(vDoccument) then exit;
for i := 0 to ValueLists.Count-1 do
begin
case vMode of
1 : // 1 : Name
v_Items := vDoccument.getElementsByName(ValueLists.Names[i]);
else // そのた:ID
v_Items := vDoccument.getElementById(ValueLists.Names[i]);
end; // case vMode
if VarIsClear(v_Items) then
begin
ShowMessage('v_Item null: '+ValueLists.Names[i]);
Continue;
end;
// ShowMessage(v_Items.length); // 要素の長さ
if (v_Items.length>=0) then
begin
v_Items.Item(0).innerText := ValueLists.ValueFromIndex[i];
vRet := True;
end;
end;
Result := vRet;
// v_Items := v.getElementById('ID');
// v_Items := v.getElementsByName('Name');
// v_Items := v.getElementsByTagName('body');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// ListBox1.Items.Add('name'+ '=' + 'Value')
SetIE_AutoFill(WebBrowser1.Document,ListBox1.Items,1);
end;