アプリ実行中のDBGrid表のハミ出し表示を避けるには

解決


hakkei  2012-03-02 10:06:22  No: 41747  IP: 192.*.*.*

delphi6のアプリ実行中に、DBGrid表の上(枠外)に突然2行ほどハミ出し
表示されます。内容はDBGrid表のものとダブっています。
表全体を検索中に起きるようです。
アプリは実行できるのですが、ハミ出し表示は消えません。
これを避ける方法はないでしょうか。

編集 削除
igy  2012-03-02 11:03:58  No: 41748  IP: 192.*.*.*

>DBGrid表の上(枠外)に突然2行ほどハミ出し表示されます。

これは、今まで表示されていなくて、環境が変わったり、ソースコードを
変更してから出たのですか?
それとも、単純にDBGridを使ったテストプログラムでも発生しますか?

>表全体を検索中に起きるようです。

この部分は、具体的には、ソースコードではどのような記述をしていますか?

他に・・・
OnDrawColumnCellイベントで何か処理をしていますか?
Delphi6は最新のUpdateは適用していますか?

編集 削除
hakkei  2012-03-02 11:16:45  No: 41749  IP: 192.*.*.*

>>DBGrid表の上(枠外)に突然2行ほどハミ出し表示されます。

>これは、今まで表示されていなくて、環境が変わったり、ソースコードを
>変更してから出たのですか?
>それとも、単純にDBGridを使ったテストプログラムでも発生しますか?

WindowsXPで開発した時は問題なかったのですが、Windows7に移してから
気づきました。ソースコードは変更していません。

>>表全体を検索中に起きるようです。

>この部分は、具体的には、ソースコードではどのような記述をしています
>か?

function BRChosa(BTO: Integer): Integer;
var
  N: Integer;
  TNB: Integer;
begin
  for N := 1 to 10 do
    begin
      BRT[N,1] := 0;
    end;
  with  DataModule1.DBISAMQuery2 do
  begin
    TNB := Fields[0].AsInteger;
    N := 0;
    while not EOF do
    begin
      if Fields[6].AsInteger = BTO then
      begin
        N := N + 1;
        BRT[N,1] := Fields[0].AsInteger; // TNB
        BRT[N,2] := Fields[2].AsInteger; // TES
        BRT[N,3] := Fields[3].AsInteger; // COL
        BRT[N,4] := Fields[4].AsInteger; // PST
      end;
      Next;
    end;
    Result := N;
    First;
    MoveBy(TNB - 1); // カーソル戻し
  end;
end;

>OnDrawColumnCellイベントで何か処理をしていますか?

していません。

>Delphi6は最新のUpdateは適用していますか?

していません。










  for N := 1 to 10 do
    begin
      BRT[N,1] := 0;
    end;
  with  DataModule1.DBISAMQuery2 do
  begin
    TNB := Fields[0].AsInteger;
    N := 0;
    while not EOF do
    begin
      if Fields[6].AsInteger = BTO then
      begin
        N := N + 1;
        BRT[N,1] := Fields[0].AsInteger; // TNB
        BRT[N,2] := Fields[2].AsInteger; // TES
        BRT[N,3] := Fields[3].AsInteger; // COL
        BRT[N,4] := Fields[4].AsInteger; // PST
      end;
      Next;
    end;
    Result := N;
    First;
    MoveBy(TNB - 1); // カーソル戻し
  end;
end;

編集 削除
igy  2012-03-02 11:25:05  No: 41750  IP: 192.*.*.*

>>Delphi6は最新のUpdateは適用していますか?
>
>していません。

どのDBGridでも起こるようでしたら、
最新のUpdateを適用してみたり、Windows7のディスプレイドライバが最新か
確認したり、はいかがですか?

編集 削除
hakkei  2012-03-02 16:47:24  No: 41751  IP: 192.*.*.*

>どのDBGridでも起こるようでしたら、
>最新のUpdateを適用してみたり

どのDBGridでも起こるようです。
delphi6のUpdate2とGeneral Update2は適用しましたが、Update3はzip
フォルダで、中を見ても.exeファイルがなく、どう適用するのかわかり
ません。

編集 削除
igy  2012-03-02 18:33:25  No: 41752  IP: 192.*.*.*

>delphi6のUpdate2とGeneral Update2は適用しましたが、Update3はzip
>フォルダで、中を見ても.exeファイルがなく、どう適用するのかわかり
>ません。

そのUpdate3というのが、
http://www.codegear.com/jp/downloads/regusers/delphi
にある、
Delphi 6 Runtime Library Update 3
のことでしたら、リンク先に
>詳細は、こちらのファイルをご覧ください。 
と説明がありますので、それをご確認ください。

編集 削除
hakkei  2012-03-02 19:43:29  No: 41753  IP: 192.*.*.*

>そのUpdate3というのが、
>http://www.codegear.com/jp/downloads/regusers/delphi
>にある、
>Delphi 6 Runtime Library Update 3
>のことでしたら、リンク先に
>>詳細は、こちらのファイルをご覧ください。 
>と説明がありますので、それをご確認ください。

Update3も適用しましたが、変わりはありませんでした。

>Windows7のディスプレイドライバが最新か
>確認したり、はいかがですか?

未熟者で、どのサイトで確認・更新すべきか分かりません。

編集 削除
hakkei  2012-03-03 06:12:14  No: 41754  IP: 192.*.*.*

下記のソースコードで、*印の2行を追加したところ
解決しました。
お世話になりました。

function BRChosa(BTO: Integer): Integer;
var
  N: Integer;
  TNB: Integer;
begin
  for N := 1 to 10 do
    begin
      BRT[N,1] := 0;
    end;
  with  DataModule1.DBISAMQuery2 do
  begin
*  Form2.DBGrid2.Datasource := nil;
    TNB := Fields[0].AsInteger;
    N := 0;
    while not EOF do
    begin
      if Fields[6].AsInteger = BTO then
      begin
        N := N + 1;
        BRT[N,1] := Fields[0].AsInteger; // TNB
        BRT[N,2] := Fields[2].AsInteger; // TES
        BRT[N,3] := Fields[3].AsInteger; // COL
        BRT[N,4] := Fields[4].AsInteger; // PST
      end;
      Next;
    end;
    Result := N;
    First;
    MoveBy(TNB - 1); // カーソル戻し
*  Form2.DBGrid2.Datasource := DataModule1.DataSource2;
  end;
end;

編集 削除