CmboBoxの幅より文字数が多い場合

解決


なべなべ  2003-12-18 02:00:43  No: 6286

CmboBoxについて教えて下さい。

CmboBoxからリスト表示した時に、幅よりも文字数が多い場合、
SendMessage(ComboBox.Handle, CB_SETDROPPEDWIDTH, 適当なサイズ, 0);
で表示幅を広げることができましたが、必ず右側に長くなります。
左側に長くなるようにはできないでしょうか?


Halbow  2003-12-18 05:15:50  No: 6287

Halbow です。

> 左側に長くなるようにはできないでしょうか?

以下のようにすると、Win98 と Win2000 では面白い動作をします。ほかの環境
ではどうかな?

    { Private 宣言 }
  public
    procedure WMApp(var Msg:TMessage);message WM_APP;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
  SendMessage(ComboBox1.Handle,CB_SETDROPPEDWIDTH,300,0);
  PostMessage(Handle,WM_APP,0,0);
end;

procedure TForm1.WMApp(var Msg: TMessage);
var
  hDropL:HWND;
  R:TRect;
  Off:integer;
begin
  hDropL := FindWindow('ComboLBox',nil);
  if hDropL <> 0 then begin
    GetWindowRect(hDropL,R);
    Off := (R.Right-R.Left) - ComboBox1.Width;
    SetWindowPos(hDropL,0,R.Left-Off,R.Top,0,0,SWP_NOSIZE or SWP_NOZORDER);
  end;
end;


にしの  2003-12-18 08:00:25  No: 6288

WinXPでも、左に伸びました。
面白いですね。
'ComboLBox'は知りませんでした。てっきりタイプミスかと思いました^^;
# ドロップダウンリストのクラス名なのですね


Halbow  2003-12-18 08:45:11  No: 6289

Halbow です。

> WinXPでも、左に伸びました。

おぉ、そうですか!

> ドロップダウンリストのクラス名なのですね

そうなんです。わたしも今回初めて知りました。ひとつの ComboBox が
はじめてドロップダウンするときに動的につくられるようです。このウィンドウ
は、トップレベルでオーナーをもたない生意気なウィンドウです。


なべなべ  2003-12-18 18:41:25  No: 6290

Halbowありがとう御座いました。
Win2000ですが、問題なく左側に表示されました。


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

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






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