日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

Delphi/マウスを移動しよう

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;


この方法は、ユーザーの操作で影響を受けるので
普通に、アプリにイベントを送りには、別のやり方が有効。

カテゴリー: ぷろぐらみんぐ
2005.06.16

Delphiに使えるドキュメント生成ツール


PasDoc SJIS対応版PasDoc GUI
出力:[ HTML, HtmlHelp, LaTeX , latex2rtf ]
説明書SupportedTagsWritingDocumentation
構文
なにもしなくても勝手にひろってくれるみたい
コメント内に
修正:R1 (0.8.8j)の場合
@タグ (内容)
といった形で動作を指定できるみたいです。
:R2 (0.8.8.3j) 2005-06-14の場合
@タグ  内容
()をつけりるとエラーおこすみたい
といった形で動作を指定できるみたいです。

コメントマーカーというのを決めると、コメント処理の動作を決めれるみたい
デフォルトではついていないので(Javadocスタイル?)、公式サイトでは、:がついていたりする。
今回は 普通のコメントと区別するために ! を使おうと思います
{! }みたいな感じです
()をいれていなかったので、warningがでて1時間苦戦しました。
{! @abstract (
このユニットは・・・
)
  @created (2005-05-02)
 }
unit taRvJpMemo;
いれたい変数や関数の直前に{! 説明}を書きます。
操作は簡単。 出力高速。  
出力結果は、きれいだけど
・・・・・ 図がグラフになっていない

Doxygen + Pas2Dox
出力:[ RTF(MS-Word), PDF, compressed HTML, PostScript, Unix man ]
対応言語
Delphi, C++, C, Java, Objective-C , PHP
, C#,  D , IDL (Corba and Microsoft flavors)
ダウンロードは、Setupを選ぶ。
フォルダ:日本語フォルダ不可・・・
使い方
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

サンプルを見る限りきれい。みやすい。
が・・・・操作が面倒
っていうか 日本語フォルダをつかえないので選択肢から除外。
・DelphiCodeToDoc
 http://dephicodetodoc.sourceforge.net/

考察
1)どちらにするか・・・・かなり悩む・・・

  1. C#で書き出すことを考えると・・・doxygenにしたほうがいいけど
    C#のユニット作ってないのでまぁいいとしよう。CなんかMOに眠ったままだし。
  2. と思っていたけど
  3. doxygenを試すと日本語フォルダを認識しないので使えない。 ソースを英語フォルダにコピーして実行してみたが、 上のサイトのような物は表示されなかった。 ファイル名がでる程度・・・・
    設定ファイルを見る限り
    TStringListのValueを使えば簡単に変更できるので設定ツールを作る手もあるがばかばかしくて作る気はおきない。 どこか探せばおちているだろうし
2)ということで
PasDoc にしたんだけど、 Type a= (v);
のときに @valueをしてみたが出力できない
vの前にコメントを貼ればできるが。。。
後方にコメントして、説明にできるタグはないのかな・・・・と思う

こちらはこちらで 不具合が。。。
でも、 お手軽
編集: R2 (0.8.8.3j) 2005-06-14をいれるとできました。
  でも、今度はクラス階層が変。継承しているのに同じ段になった・・・)

どちらにしても
自分用の作って
テンプレートをCTRL+J に登録して使うといい

() 構文がきかなくなったのが困りものだが・・・

テンプレート集
?

?

?

カテゴリー: ぷろぐらみんぐ
2005.06.13

Delphi/IEをオートフィルしよう


サンプルコード
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;
カテゴリー: ぷろぐらみんぐ
2005.04.09



PR

[PR]