CmboBoxについて教えて下さい。
CmboBoxからリスト表示した時に、幅よりも文字数が多い場合、
SendMessage(ComboBox.Handle, CB_SETDROPPEDWIDTH, 適当なサイズ, 0);
で表示幅を広げることができましたが、必ず右側に長くなります。
左側に長くなるようにはできないでしょうか?
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;
WinXPでも、左に伸びました。
面白いですね。
'ComboLBox'は知りませんでした。てっきりタイプミスかと思いました^^;
# ドロップダウンリストのクラス名なのですね
Halbow です。
> WinXPでも、左に伸びました。
おぉ、そうですか!
> ドロップダウンリストのクラス名なのですね
そうなんです。わたしも今回初めて知りました。ひとつの ComboBox が
はじめてドロップダウンするときに動的につくられるようです。このウィンドウ
は、トップレベルでオーナーをもたない生意気なウィンドウです。
Halbowありがとう御座いました。
Win2000ですが、問題なく左側に表示されました。
ツイート | ![]() |