Q&A

  • [질문]다른 실행프로그램의 open dialog에 파일명 전달하기?
상용프로그램이 파일열기를 1개씩 하도록 되어 있어 델7로 1개 오픈 작업후 연속으로 작업하려고 아래처럼
하였는데 캡션이 "열기" => "test.txt"로 변경되네요.

파일이름 자리에 문자를 보낼 수는 없나요?(상용프로그램은 구매한 것으로 VB로 코딩된 듯함)

hWnd := FindWindow(nil, PChar('열기'));
SendMessage(hWnd,WM_SETTEXT,0,LParam(PChar('test.txt')));
=끝=
1  COMMENTS
  • Profile
    장성호 2008.06.10 03:54

    OpenDialog에서 파일명이 들어가는 부분은 ComboBox 입니다.

    vcl에서도 마찬가지 그렇지만
    ComboBox에는 Edit가 같이 숨어있습니다.


    즉 OpenDialog에서 ComboBox를 찾고 ComboBox에서 Edit를 찾아서
    Edit 에다가 SetText 하시면 됩니다.


    그러면 OpenDialog에서 어떻게 ComboBox를 찾나?

    방법은?
    방법 1. class명으로 찾을수 있는데 ComboBox가 여러개 있으므로 정확히 찾기가 곤란하죠
    하지만 spy로 보면
    Dlg->ComboBoxEx32->ComboBox->Edit 순으로 되어있습니다.

    FindWindowEx를 이용하면
    ComboBoxEx32는 하나뿐이므로 얼마든지 찾을수 잇죠


    방법 2. WindowFromPoint 로
    OPenDialog 의 크기를 보고 ComboBox가 있는 정확한 위치를 계산한다음
    WindowFromPoint 함수를 이용하여 해당위치의 윈도우를 얻어옵니다.

    방법3. GetDlgItem 이라는 함수가 있습니다.
    이는 ID를 이용하여 특정윈도우의 Child윈도우중에서 원하는 윈도우 핸들을 구하는 함수인데....
    Dlg->ComboBoxEx32->ComboBox->Edit 순이므로
    GetDlgItem을 두번하면 ComboBox를 얻겠고 세번하면 Edit를 얻을수 있겠네요


    그럼..



    • steps
    • 2008.06.14 02:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.06.15 02:26
      자답입니다. 코드에서 이미지처리에 리용된 GDI PLUS가 문제였습니다. GDI Plus를 쓴 경우 우의 증상...
    • 화이팅
    • 2008.06.14 00:54
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 깔쌈보이
      2008.06.14 02:51
      with mainf do begin 문장에 보면 name := 어쩌구 구문 있죠? 이 구문에 한글이 들어가서 발생한 오류입...
    • 화이팅
      2008.06.14 03:44
      이름을 바꾸니 위와같은 에러는 발생하지 않네요.. 깔삼보이님 감사합니다^^ 근데 실행을 시키면 아무런...
    • 석주현
      2008.06.19 02:44
      Form2.QuickRep1.Prepare; 를 해주시고 Preview 를 하셔야 합니다.
    • 김길남
    • 2008.06.14 00:08
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.06.13 20:21
      이름으로 찾는 FindComponent를 사용해 보세요. 그리고 FrmMain는 그촘의 이름입니다. <!--CodeS--&...
    • 강태원
      2008.06.13 20:53
      아하 저런 함수가 있었군요. 감사합니다. 이제 할수 있을듯...^^
    • 이정욱
      2008.06.13 21:04
      한가지 더 팁을 알려드리면, FindComponent 를 사용하셔도 무방합니다. 하지만 성능상의 잇점을 조금...
    • 강태원
      2008.06.14 00:15
      아하.. 밑쪽의 방법도 괜찮은데요?^^; 근데 이미 다 해놨는데... 바꿔야 하나...(이놈의 게으름..-...
    • 석주현
      2008.06.14 11:52
      아래쪽의 방법이 더 나은거 같네요. 코드 컴프리트 같은 책이나 아니면 보통 프로그래밍 관련 책들을 ...
    • 천천히
    • 2008.06.11 23:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.06.12 02:22
      for문 다음에 rowcount := rowcount + 1; 이렇게하면 보이겠네요. 전번에 처럼 rowcount로 하시면...
    • 홍성락
      2008.06.12 04:38
      2가지 방법으로 해보겠습니다. 1방법은 그냥 넣을때 곰마를 넣습니다, 그러나 실제 데이타와 다르므로 ...
    • 천천히
      2008.06.13 00:06
      님말씀대로 formatfloat 함수
    • 홍성락
      2008.06.13 03:10
      FormatFloat인자가 Variant라서 그런가봅니다 Cells[1, i+1] := FormatFloat('#,##0', StrToFloat(VarTo...
    • 천천히
      2008.06.13 19:09
      홍성락님..답변 감사합니다.. 그런데 또 에러가... ㅠ..ㅠ Cells[1, i+1] := FormatFloat('#,##0', ...
    • 홍성락
      2008.06.13 20:15
      아마 위에서 말한것 처럼 데이타에 숫자가아닌 값이 있나 보네요. try를 사용해 함수내 놓거나 별고 함...
    • 천천히
      2008.06.14 00:26
      감사합니다.. 해결했습니다... ^^; 복 받으세요...
    • 플루토
    • 2008.06.11 01:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.06.11 05:23
      파일을 다운로드하든 메모리에 스트림으로 써넣든 클라이언트에 이미지자료가 오기전에는 불가능합니다.
    • 이정욱
      2008.06.11 06:26
      만약 이미지가 커서 그런다면, 이미지 썸네일을 생성 후 받아서 보여주시면 됩니다.
    • 장성호
      2008.06.10 03:14
      <!--CodeS--> procedure TForm1.Button2Click(Sender: TObject); var idx: Integer; begin ...
    • 강태원
      2008.06.10 18:05
      아 C++ 처럼 형변환이 가능하군요. 감사합니다.
    • 석주현
      2008.06.10 03:06
      DateTimeToFileTime(EncodeDateTime(2008,6,9, 17,25,00,00)); EncodeDateTime 으로 한번 해보세요. ...
    • 이정욱
      2008.06.11 00:29
      FileTimeToLocalFileTime 를 참고해보세요 ^^ 우리나라의 GMT 타임 존이 다르기 때문입니다. 위의 ...
    • 석주현
      2008.06.11 09:41
      역씨 정욱님 대단하시네요. ^^ 저도 좋은거 배웠네요.
    • 신철우
    • 2008.06.10 02:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장성호
      2008.06.10 03:54
      OpenDialog에서 파일명이 들어가는 부분은 ComboBox 입니다. vcl에서도 마찬가지 그렇지만 ComboB...
    • 백록화
      2008.06.10 00:49
      edit 의 imemode 가 imDontCare 이라면...다른 콤포넌트의 영향을 받을수 있습니다. edit1 에 들어오기전...
    • 바다소리
      2008.06.10 01:16
      감사 합니다 검색을위해 호출되는 하위 폼의 edit box에 imemode를 한글로 했었는데 거기서 영향을 ...
    • 임정미
      2008.06.09 09:31
      해결했습니다. 배열크기는 SetLength(value , s_count); 로 정해놓고 for 문은 scount+1 만큼 ...
    • 이정욱
      2008.06.09 20:10
      윽.. 도와드리려고 했는데... 챙피해 하지 마세요 ^^; 전 더 한 실수도 많이 한답니다.ㅜㅜ 꽤 긴...
    • 석주현
      2008.06.09 22:26
      ㅎㅎ 저도 캡춰해서 분석하다가 말았습니다. 제가 보긴 코드를 좀 나누고 좀 리펙토링 하셔야 할 것 ...
    • 이정욱
      2008.06.06 13:13
      test (a,b) 로 그냥 호출 하시면 됩니다. 그리고 그냥 ShowMessage(b); 하시면 제데로 출력될 것입니...
    • 플루토
      2008.06.06 20:24
      네 감사합니다. 수정했어요^ ^
    • 구창민
      2008.06.06 03:02
      이정욱님 편역한...델파이7 Check 또는 아래 델마당에 어떤분이 추천하셨던 책이네요.. 류종택님 저서....
    • 홍성락
      2008.06.05 23:29
      자료실에 [문자를 좌로 스크롤 하는 소스-이미지 사용]으로 올렸습니다. 수정하시면서 사용해 보세요
    • 김광식
      2008.06.11 00:54
      감사합니다...
    • 화이팅
    • 2008.06.05 10:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김병윤
      2008.06.05 12:37
      기본적으로 DATA는 Query한값을 --> DataSource를 통해 --> DBGrid에 보여줍니다. 결과적으로 Query의 ...
    • 화이팅
      2008.06.07 05:33
      고맙습니다..^^ 덕분에 잘 해결되었습니다~
    • 왕초보
    • 2008.06.05 02:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.06.05 03:00
      포트 번호는 보통 Ip를 통해서 호스트를 찾고 포트번호를 통해서 호스트 내의 통신 접속점을 구분하기 위...
    • 장성호
      2008.06.05 06:22
      TServerSocket의 Port를 100000으로 하고 Active=true해 놓은후에 netstat -a 해보세요 TCP 에...
    • 석주현
      2008.06.04 22:54
      디버깅 하시면서 쿼리의 결과가 제대로 나오는지 확인 부터 해보세요. 디비 구성이 어떤지 모르지만 ...
    • 이정욱
      2008.06.04 22:57
      저도 가끔 이런경우를 보는데, 아마도 for 문의 최적화 때문일 수도 있습니다. 디버깅을 해보시면, co...
    • 석주현
      2008.06.04 23:20
      아 그러고 보니 정욱님 말씀 처럼 최적화에 따라 달라지는 경우가 있습니다. 음 저 같으면요. v...