問題タブ [tstringgrid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - InvalidateRow / InvalidateColumが機能しないのはなぜですか?
InvalidateRowおよびInvalidateColumはTStringGridでは機能しません。メソッドは、行/列全体を無効にすることはありません。
InvalidateGridは常に機能します(したがって、バグの原因が見つかるまで、これは汚い回避策になる可能性があります)。
状況によっては(ランダムに見える)、InvalidateRowとInvalidateColumも機能するようです。更新:どの状況がバグを引き起こすかを見つけました。グリッドは表示領域よりも大きくなければならず、位置はビューの外側にあります。
何か案は?
Delphi 7、Win732ビット
delphi - 水平スクロールバーが動いているときのStringGridのライブアップデート?
Delphi 2010では、約15列x5行の水平スクロールバーを持つグリッドを表示する必要があります。
StringGridを使用することにしました。
ただし、マウスボタンを押しながら水平スクロールバーをドラッグしているときに、グリッドをライブでスクロールしたいと思います。
StringGridコンポーネントは、表示されますが、ライブでスクロールしません。マウスボタンが離されるまで待機してから、列を更新し、必要に応じてスクロールします。
また、水平スクロールバーボタン(いわゆる)は列数に比例しません。そして、一番下の行にあるときに下矢印を押すと、右の次の列の一番上に移動します...
これらは一般的なニーズのように思われるので、TStringGridで見つからなかったので驚きました。
これらの2つの問題を回避する方法について何か提案はありますか?DbGridまたは他の標準コンポーネントを使用できますが、回避できる場合は商用グリッドを使用しないことをお勧めします。そして、私はシェアウェアやフリーウェアを使用するつもりはありません...
TIA
delphi - ThemedDBGrid のような StringGrid をテーマにするコンポーネント
Delphi 5 と互換性のあるThemedDBGridコンポーネントのように、stringrid をテーマ化する同様のコンポーネントが存在します。
delphi - OnDrawCell イベントの外側から TStringGrid セルをペイントすることは可能ですか?
OnDrawCell イベントを使用せずに Delphi の TStringGrid に特定のセルを描画する方法はありますか。たとえば、ボタンをクリックすると、指定したセルがその内容に応じて描画されます。
delphi - OnDrawCell センター テキスト StringGrid - Delphi
StringGrid のテキストを中央に配置しようとしています。いくつかの調査の後、他の誰かがここに投稿したこの関数を思いつきました。これは、DefaultDraw:False で使用すると機能するはずです。
ただし、DefaultDraw:False を設定すると、StringGrid がグリッチに見えます。
StringGrid をテキストで埋める関数の行は次のとおりです。
arrpos と arrby は文字列の配列です。sg は StringGrid です。
その後、セルの中央に表示されるテキストを実行する必要があります。
アップデート
同様の問題に苦しんでいる人にとって、このコードの重要な問題の 1 つは、if ステートメントが
この行は、StringGrid が 0 ベースであるため、列 1、たとえば 2 番目の列のコードのみを実行することを意味します。if ステートメントは安全に削除でき、デフォルトの描画を無効にすることなく実行および機能します。
delphi - 私のコードがとても遅いのはなぜですか?
時間がなくても同様の問題を抱えている可能性がある人のために、トップに投稿された(申し訳ありません)回答。
ルール 1 は、いつものように、できる限りループから抜け出すことです。
2、TField var := ADODataSet.FieldByname() をループの外に移動します。 3、ADODataSet.DisableControls(); および ADODataSet.EnableControls(); ループ4の周りで、各行のstringGrid.Rows [r].BeginUpdate()およびEndUpdate()(コントロール全体では実行できません)これらのそれぞれが数秒削られましたが、「目よりも速く」になりました見える」に変更することで
stringGrid.RowCount := ADODataSet.RecordCount;
ループの前に置く
+1、そして助けてくれたすべての人に心から感謝します。
(ここで、TChart の描画を最適化するために何ができるかを見ていきますが、これも遅いです ;-)
テーブルに約 3,600 行あるため、文字列グリッドに入力するのに 45 秒かかります。私は何を間違っていますか?
アップデート:
delphi - ユーザーが TStringGrid セルの編集を終了したことを検出するにはどうすればよいですか?
ユーザーがデータの入力を終了したら、文字列グリッドのセルの内容を返したいと思います。ユーザーは、キーボードの Enter キーを押すか、別のセルをシングルクリックまたはダブルクリックすると終了します。
Lazarus には FinishedCellEditing のメソッドがありますが、Delphi にはありません。Delphiでそれを検出するにはどうすればよいですか?
image - Delphi-文字列グリッド内の選択したセルのキャンバスに描画する-可能ですか?
文字列グリッドのセルのキャンバスに描画したい。これは、文字列グリッドにプリロードされた画像の上に表示されます。
私が持っているもの
現在、画像の上に描画する代わりに、2番目の透明な画像を読み込んでから、セルの上にペイントしています。これは私が使用するコードであり、機能します。
この手順では、最初にセルを参照する画像を描画します。「プレイヤー」が存在する場合は、プレイヤーの駒を上に描画します。「プレーヤーピース」画像は透明な.PNG画像であるため、下の元の画像は引き続き表示されます。
欲しいもの
この方法の欠点は、画像が一定であるため、「プレーヤーピース」がセル内の設定された位置にあることです。どのセルを選択するかによって、セル内の異なる位置に「プレイヤーピース」を描画できるようにしたいと思います。私は約200個のセルを持っているので、位置の異なる多くの画像を手動で作成したくありません。
私が試したこと
drawcellプロシージャ内でstringgridのキャンバスに直接描画しようとしましたが、描画されていた現在のセルではなく、stringgrid全体を参照しているように見えました。
調べましたが、現在のセルのキャンバスを参照できないようです-存在しないと思いますか?
次に試したのは、一時的な画像に描画してから、その画像をセルに描画することでした。
これはある程度機能し、セルに画像を描画しましたが、画像の背景/キャンバスが不透明であるため、セルは白く、円が表示され、下の画像は表示されませんでした。少し調べてみましたが、画像のキャンバスを透明にする方法が見つかりませんでした。
私が試みることを考えることができる最後のことは、現在のセルの左上の点を見つけて、そこからキャンバスに直接描画するアルゴリズムを書くことですが、それは汚くなり、stringgridを再描画するときに問題を引き起こす可能性があります。
誰かが私の問題を回避する方法を見ることができますか?
よろしくお願いします、ジョシュ
image - 背景に画像がある Delphi StringGrid
こんにちは、画像を文字列グリッドの背景として表示できるかどうかを知っている人はいますか? または、これを実行できる無料の Grid コンポーネントを知っている人はいますか?
ありがとう
コリン
delphi - DelphiのTStringGrid内にTCheckBoxを配置します
特定の列のすべてのセルにDelphiのTCheckBox
内部を配置したいと思います。TStringGrid
DelphiXEを使用しています。