양식에 DBGrid가 있고 여러 항목을 선택 했으므로 Outlook의 "상자"에 선택한 셀 (전자 메일 주소)을 보내야합니다. 내가 할 수있는 어떤 도움 (델파이 5) 미리 감사드립니다Delphi 5의 TDBGrid에서 선택된 셀을 얻는 방법
답변
선택한 전자 메일 목록을 얻으려면이 절차를 사용할 수 있습니다. Outlook의 경우 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 ++ 및 메일 프로그램을 시작한 후 "새 메일"을 누르면 메일 링 윈도우가 나타납니다. Spy ++에서 새로 고침하고 "창 찾기"도구를 사용하십시오 - TO 목록을 클릭하면 작성 방법을 확인할 수 있습니다.
Outlook Express로 시작했습니다. 메일 윈도우는 클래스 ATH_Note이고 내부 주소 영역은 OE_Envelope 클래스의 윈도우이고 내부에는 여러 윈도우가 있으며 그 중 일부는 RichEdit20W 클래스입니다. '받는 사람'입력란이 첫 번째 입력란입니다.
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;
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 아웃룩은 어떻게 될까? 나는 직장에서 스파이 + + 그것을 확인하고 "To"필드 행 "RichEdit20WPT"클래스 (참고 T는 끝에), 부모 클래스는 "# 32770 (대화)", 부모는 "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을 추가하여 코드를 향상 시켰습니다.이 코드는 작업을 수행하며, 하나의 추가 공간은 OE가 입력 한 전자 메일 주소를 보도록 강제합니다. – smok1
- 1. Delphi 5의 Hashtable 구현
- 2. Delphi 5의 웹 서비스
- 3. DataGrid에서만 선택된 셀을 업데이트합니다.
- 4. Excel 2007에서 마지막 활성 셀을 얻는 방법
- 5. Delphi : Tree View에서 선택된 항목을 선택 취소
- 6. OpenSymphony WebWork select에서 선택된 항목을 얻는 방법
- 7. UITableview에서 선택된 행의 제목을 얻는 방법
- 8. slickgrid에서 선택된 행을 나타내는 객체를 얻는 방법
- 9. Emacs Lisp에서 선택된 텍스트를 얻는 방법?
- 10. 다른 페이지에서 DataGridView의 선택된 행을 얻는 방법
- 11. asp.net의 목록 상자에서 선택된 값을 얻는 방법
- 12. 연락처에서 선택된 사람의 전화 번호를 얻는 방법
- 13. ExtJs에서 그리드 패널의 선택된 행을 얻는 방법?
- 14. Dojo EnhancedGrid : 선택된 컬럼을 얻는 방법?
- 15. iPhone - 선택된 셀을 uitableview 맨 위로 이동
- 16. Delphi의 TDBGrid에서 현재 행 찾기
- 17. Delphi/ADO : Execute()의 결과를 얻는 방법?
- 18. Delphi - 디렉토리의 모든 파일 목록을 얻는 방법
- 19. Delphi 2009에서 이미지의 현재보기 크기를 얻는 방법
- 20. PHP 5의 Java 사용 방법
- 21. Delphi TStringGrid 다중 선택, 선택된 행 결정
- 22. ASP.Net에서 셀을 동적으로 클릭하면 gridview 셀 값을 얻는 방법
- 23. 다중 선택 중에 JTable에서 포커스가있는 셀을 얻는 방법
- 24. javascript를 통해 ajax.net ComboBox에서 선택된 값을 얻는 방법
- 25. WebBrowser 컨트롤에서 현재 선택된 텍스트의 글꼴 크기를 얻는 방법
- 26. 다중 친구 선택기에서 선택된 친구 ID를 얻는 방법?
- 27. jQuery를 사용하여 select 요소의 선택된 옵션 이름이나 ID를 얻는 방법
- 28. jQuery를 사용하여 드롭 다운에서 선택된 값의 수를 얻는 방법
- 29. Eclipse 플러그인에서 패키지 탐색기에서 선택된 노드를 얻는 방법
- 30. XUl JavaScript에서 선택된 체크 박스 값의 값을 얻는 방법
이것은 굉장히 복잡하고 완전히 필요하지 않습니다. MAPI를 사용하거나 Outlook을 자동화하여 전자 메일을 만들 수 있습니다. 원한 해킹에 의지하기보다는 승인되고 문서화 된 방법으로 해내는 것이 낫습니다. 비 관리자 사용자로 비스타에서 코드를 실행해도 작동하지 않는 이유는 무엇입니까? –