: BMPオブジェクトがあるLISTBOXからテキストの取得

解決


  2006-08-25 21:16:12  No: 22983

OS:win2000 sp4
開発:Del6P

function GetSelText(hWnd: HWND; index: integer): string;
var
  len: integer;
  s: string;
  PC:PChar;
begin
  index := SendMessage(hWnd,LB_GETCURSEL,0,0);
  len := SendMessage(hWnd,LB_GETTEXTLEN,WPARAM(index),0);
  GetMem(PC,len+1);  // +1 for null-terminator
  SendMessage(hWnd,LB_GETTEXT,WParam(index),LParam(PC));
  SetString(s,PC,len);
  FreeMem(PC);
  result := s;
end;

指定インデックスのテキスト取得の為に上記の関数を作りました。
しかし、BMPオブジェクトを取得しているようでテキストが取り込めません。
テキストのみを取り込みたい場合どのようにすれば宜しいでしょうか?
ご存知の方がいらっしゃいましたらご教示お願いいたします。


えーと  2006-08-26 00:17:11  No: 22984

これは他アプリの ListBox ですか?
そうであれば、共有メモリを使う必要があります。ググってみてください。


  2006-08-26 03:25:30  No: 22985

他アプリのLISTBOXになります。
この関数はLISTBOXのハンドルを渡しさえすれば
他アプリのLISTBOXでも内容(テキスト)を取得できる事を
delphiとVBで作成したプログラムで確認しております。

対象プログラムはcanvasにTextoutしているようなのです。
canvasに書かれているtextは取得できないのでしょうか?


えーと  2006-08-26 03:40:21  No: 22986

> canvasに書かれているtextは取得できないのでしょうか?

できません。絵と同じですから。
たとえば、他アプリから、Delphi でつくったアプリの TLabel の
テキストをどうやって取得するか考えてみてください。


えーと  2006-08-26 03:41:42  No: 22987

> 対象プログラムはcanvasにTextoutしているようなのです。

ListBox ではないのですか?


  2006-08-26 04:29:47  No: 22988

なるほど・・・
絵と同じ。それでは完全に無駄ですね。
悪あがきせずに別の方法を検討してみます。

>> 対象プログラムはcanvasにTextoutしているようなのです。
>ListBox ではないのですか?
他アプリのListBoxです。
1要素につき画像とテキストのペアで表示されていました。

質問に答えて頂きありがとう御座います。
このスレはとりあえず解決とさせていただきます。


えーと  2006-08-26 05:02:59  No: 22989

> 1要素につき画像とテキストのペアで表示されていました。

あぁ、オーナードローですね。それではやはりテキストの取得は困難でしょう。


へびあし?  2006-08-26 05:50:59  No: 22990

>> 対象プログラムはcanvasにTextoutしているようなのです。
オーナードローであるかないかは無関係で、要はそのListBox.Items[]データが
設定されているかないかでしょう。
オーナードローであっても、普通は次のようにItems[]データを元にテキストを描画すると思いますけどね。それならテキストを取得できますよ。
 with ListBox do
  Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]);
ところで、最初に示されたコードは多分どこかで見つけたサンプルを丸写ししたんでしょうけど、この行は不要でしょ?
  index := SendMessage(hWnd,LB_GETCURSEL,0,0);


通りすがり  2006-08-26 05:57:15  No: 22991

> ところで、最初に示されたコードは多分どこかで見つけたサンプルを丸写ししたんでしょうけど、この行は不要でしょ?
>   index := SendMessage(hWnd,LB_GETCURSEL,0,0);

この行がない場合に、
「リストボックスの選択している行の文字列を取得する」場合、どうするんでしょうか。
indexがわからなければとれなさそうですが・・・。
# もしかして、WPARAMに-1とかしたら選択している行として扱われる?わけないですよね・・・


えーと  2006-08-26 09:40:22  No: 22992

> この行がない場合に、
>「リストボックスの選択している行の文字列を取得する」場合、どうするんでしょうか。

関数の形が

function GetSelText(hWnd: HWND; index: integer): string;

のようになってるんだから、呼ぶ前に index を取得するんでしょう。
逆に、あのコードでは、そのほかの項目は取れませんね。

> オーナードローであるかないかは無関係で、要はそのListBox.Items[]データが
> 設定されているかないかでしょう。

そのとおりですね。
外部にテキストと画像の配列を持ってるような場合は取れませんが。


えーと  2006-08-26 09:51:23  No: 22993

あぁ、でも関数の名前が GetSelText() なのね?

なんで index 渡す必要があるのだろう?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加