フォームにDBGridがあり、複数の選択を行ったので、選択したセル(電子メールアドレス)をOutlookの "TO Box"に送信する必要があります私はこれを行うことができます、私は任意のヘルプ(デルファイ5) ありがとうございますDelphi 5のTDBGridから選択されたセルを取得する方法
答えて
選択した電子メールのリストを取得するには、この手順を使用することができます。見通しについては、shellexecとmailtoを使うか、もしあればAPIを使いたいかもしれません。
var
i: Integer;
S: TStringList;
begin
S:=TStringList.Create;
if DBGrid1.SelectedRows.Count > 0 then
begin
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
Table1.GotoBookmark(pointer(DBGrid1.SelectedRows[i]));
S.Add(Table1EMail.AsString);
end;
//Outlook procedure goes here
end;
S.Free;
end;
Windowsのすべての(ほぼ)コントロールはウィンドウそのものです。そのクラスとインスタンス名を持っています。各メールクライアントの各MailToウィンドウの構成は同じであるため、適切な制御を見つける方法を知った後、解決策を構築することができます。
これは、Visual StudioのSpy ++が便利な場所です(もしあなたがそれを持っていないのであれば、類似のツールを見つけようとするとhttp://msdn.microsoft.com/pl-pl/magazine/cc163617(en-us).aspxにフリーウェアバージョンがありますがクールな検索ツールはありません)。
Spy ++とメールプログラムを起動した後、「New mail」を押すとメーリングウィンドウが表示されます。 Spy ++でリフレッシュし、 "Find window"ツールを使用する - あなたのTOリストをクリックすると、その作成方法が表示されます。
私はOutlook Expressを使い始めました。メールウィンドウはATH_Noteクラスであり、内部アドレスエリアはOE_Envelopeクラスのウィンドウであり、このウィンドウ内にはいくつかのウィンドウがあり、そのうちいくつかはRichEdit20Wクラスです。 "To"フィールドが最初のフィールドです。
procedure UpdateToOE;
var
Window:Thandle;
Text:PChar;
begin
{Lets find Mail window}
Window:=FindWindow('ATHNote',nil);
if (Window = 0) then Exit;
{Lets find adress area inside}
Window:= FindWindowEx(Window,0,'OEEnvelope',nil);
if (Window = 0) then Exit;
{Lets find TO field - remeber this is the first field of this class}
Window:= FindWindowEx(Window,0,'RichEdit20W',nil);
if (Window = 0) then Exit;
{Prepare text into PChar}
Text:='[email protected]';
{Send message WMSETTEXT which will set our text in control}
SendMessage(Window,WMSETTEXT,0,Integer(Text));
{Sending one extra space to prevent OE does not notice - answer to grzegorz's question}
SendMessage(Window,WM_CHAR,32,1);
//done!
End;
注:FindWindowEx二paramは0が常に行の最初に検索されますです - ので、しかし、あなたはこのようにかなったことを行います場合:
Window:=FindWindow('ATH_Note',nil);<br>
if (Window = 0) then Exit;<br>
Window:= FindWindowEx(Window,0,'OE_Envelope',nil);<br>
if (Window = 0) then Exit;<br>
Sibling:= FindWindowEx(Window,0,'RichEdit20W',nil);<br>
if (Sibling = 0) then Exit;<br>
Window:=FindWindowEx(Window, Sibling, 'RichEdit20W',nil);<br>
if (Window = 0) then Exit;<br>
Text:='[email protected]';<br>
SendMessage(Window,WM_SETTEXT,0,Integer(Text));<br>
テキストSECOND編集フィールドに配置されます。 FindWindowExについてはmsdnを参照してください。
これはOE(XP SP3 IE7)に適しています。しかし、MS Outlookはどうですか?私は仕事でSpy ++でそれをチェックし、 "To"フィールドは行 "RichEdit20WPT"クラス(最後はT)にあり、親クラスは "#32770(Dialog)"、親は "AfxWndW"再び親クラスは "AfxWndW"です(これはTPanelのなんらかのMSスタイルのTPanelです)。 - tadam! - メールウィンドウのクラスは "rctrl_renwnd32"です。したがって、このための擬似コードは次のようになります。
Window:=FindWindow('rctrl_renwnd32',nil);<br>
Window:= FindWindowEx(Window,0,’AfxWndW’,nil);<br>
Window:= FindWindowEx(Window,0,’AfxWndW’,nil);<br>
Window:= FindWindowEx(Window,0,’#32770 (Dialog)’,nil);<br>
//Search for FIRST (don’t know what it is)<br>
Sibling:= FindWindowEx(Window,0,’RichEdit20WPT’,nil);<br>
//Search for TO field<br>
Window:= FindWindowEx(Window,Sibling,’RichEdit20WPT’,nil);<br>
Text:='[email protected]';<br>
SendMessage(Window,WM_SETTEXT,0,Integer(Text));<br>
おそらくあなたは、現在のテキストを抽出し、それに応じて新しいテキストを更新するために、WM_GETTEXTを使用したいと思うでしょうが、これは編集フィールドに入るの範囲を超えています。
BTW:このコードはOutlookのバージョンに強く依存しますので、以前はSpy ++でバージョンをチェックしてみてください)。
smok1:ソリューションが実際に動作しているかどうかを確認しましたか?送信ボタンをクリックしてください。 OEによれば、テキストボックスには入っていますが、アドレスはありません。または、テキストボックスの左側にあるアイコンをクリックします。 OEは、WM_SETTEXTを使用してEntereredアドレスを表示しません。手動で入力する必要があります。
はい、あなたは正しいです。私はWM_CHARを追加することでコードを改善しました。これは実際にコードを動作させ、1つの余分なスペースがOEに入力された電子メールアドレスを見せるようにします。 – smok1
- 1. WPFデータグリッドのすべての選択されたセルを取得する方法
- 2. 選択した行(QTableView)からセルの値を取得する方法は?
- 3. 複数選択時にJTableでフォーカスされたセルを取得する方法
- 4. WPF:DataGridでクリック/選択されたセルのインデックスを取得
- 5. C# - 選択されたセルの行の最初のセルの値を取得
- 6. jqGridで選択されたデータ行を取得する方法
- 7. 選択されたオプションを取得する方法jquery autocomplete
- 8. 他のフレームから選択されたテキストを取得する
- 9. コントローラの選択された行からデータテーブルを取得する
- 10. iPhoneのセルで選択されたボタンと選択されていないボタンの問題を取得する
- 11. ToggleGroupから選択したラジオボタンを取得する方法
- 12. マルチラインリストビューから選択した項目を取得する方法
- 13. JListから選択したファイルを取得する方法
- 14. system.web.mvc.selectlistから選択したテキストを取得する方法
- 15. PyQt:テーブルウィジェットで選択したセルの内容を取得する方法は?
- 16. TableViewControllerのセル(Disclosure Detail)から次のViewControllerにデータをロード(選択/クリックされたセルの値)する方法は?
- 17. ラジオリストビューから選択されたアイテムを取得します。 Android
- 18. asp..netを使用してgridviewで選択されたセルの値を取得する方法
- 19. 選択したすべてのセルの値を取得する
- 20. 動的に構築されたコンボボックスから選択された値を取得する方法
- 21. 複数選択リストから選択解除されたオプションを取得
- 22. DataTablesは選択された行のセルの配列データを取得します
- 23. C#:選択したセルのオブジェクトを取得する(linq +エンティティ)
- 24. 動的ドロップダウンリスト選択の選択された行インデックスを取得
- 25. セルまたはそれぞれの行を選択せずにwpfデータグリッドから特定のセル値を取得する方法はありますか?
- 26. リホストされたWorkflowDesignerで選択したアクティビティを取得する方法
- 27. excel 2010から選択範囲を取得する方法は?
- 28. JQueryからデータを取得する方法選択可能?
- 29. 別のノードセットで選択されたノードの位置を取得する方法
- 30. JTable:選択したセルを取得するには?
これはひどく畳み込まれており、まったく必要ありません。 MAPIを使用するか、Outlookを自動化して電子メールを作成できます。原油ハックに頼るのではなく、承認された、文書化された方法でそれを行う方が良いです。 Vista上で管理者以外のユーザーとしてコードを実行しても機能しないときはどうしますか? –