DBGRIDの縦スクロールバーが最初は出ているのですが、
何度もEmptyDataSet;とかを繰り返すと、表示する場合と非表示の場合があります。
強制的に縦スクロールバーを出す方法はありますか。
>EmptyDataSet;とかを
『とかを』とありますが他に何かしているのでしょうか?
下記ボタンイベントを交互にしている動かしている限りでは
縦スクロールバーが消失することはありませんでした。
Delphi7
WindowsXP SP2
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.Close;
ClientDataSet1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientDataSet1.EmptyDataSet;
end;
今更ながらですが・・・
しかも不確かな情報ですが・・・
以前 Win2000+Del7 環境で同様の現象が出た事がありました。
その時は検索する度に縦スクロールバーが交互に出たり消えたりしていました。
原因は分からなかったのですがXP機でコンパイルすると発生しない現象だった
ため、以後 Win2K機 を使わずに開発を進めた経験があります。
ご参考になれば。
めじなさんのおっしゃる通りなんです。
WinXP+Del7で開発していますが、いまだ起こります。
CDSMei.DisableControls;
CDSMei.EmptyDataSet;
CDSMei.First;
:
:
CDSMei.Append;
:
:
CDSMei.First;
CDSMei.EnableControls;
上記の記述をしています。
以前は下のように書いていましたが、今は逆(上のよう)にかえました。これで消える頻度が落ちたかなといったレベルです。
CDSMei.EmptyDataSet;
CDSMei.DisableControls;
来月から本格的に動かします。実際のところ逃げ道を探しています。
Delphi5のときで、垂直スクロールバーが表示しないことがあったときは、
以下のように感じで対応した記憶があります。
procedure TForm1.DataSource1DataChange(Sender: TObject;
Field: TField);
var
siv: TScrollInfo;
hWnd: THandle;
begin
hWnd := DBGrid1.Handle;
// SB_VERT 情報取得
siv.cbSize := sizeof(siv);
siv.fMask := SIF_ALL;
GetScrollInfo(hWnd, SB_VERT, siv);
if (siv.nMin = 0) and (siv.nMax = 100) and (siv.nPage = 0) and (siv.nPos = 0) then
begin
// SB_VERT 情報更新
with siv do
begin
nMin := 0;
nMax := 0;
nPage := 1;
nPos := 0;
end;
SetScrollInfo(hWnd, SB_VERT, siv, True);
end;
end;
igy様
なんとお礼を申し上げれば良いか。
頂いたコードで全てが解決しました。
今はスクロールバーが消える事もなく動作しております。
コードまでご提示いただき、心から感謝しております。
ありがとうございました。
ツイート | ![]() |