5
私はその行を右クリックして、文字列グリッド内の行からすべてのセルのテキストをストライクしたいと思います。私のコードは大丈夫ですが、行からクリックされたセルはストライクされません(もう一方のウェル)!また、私はライン上で最初にクリックする必要がありますし、右クリックして続行し、私はちょうど右クリックしたいが、方法がわからない: -/ マイコード:stringgrid(delphi)でテキストを打つ方法
procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
i, j: integer;
begin
if Button = mbRight then
begin
j:=StringGrid1.Selection.Top;
If MessageDlg('Disable row '+IntToStr(j),
mtConfirmation, [mbYes, mbNo], 0, mbYes) =mrYes then
begin
With Stringgrid1 As TStringGrid Do
With Canvas Do
begin
for i := 0 to 2 do
begin
Rect := CellRect (i, StringGrid1.Selection.Top);
Font.Style := Font.Style + [fsStrikeOut];
FillRect(Rect);
DrawText(Canvas.Handle, PChar(Cells[i,j]), -1, Rect ,DT_CENTER);
end;
end;
end;
end;
end;
のwonderfull! ! ストライク状態を保存する場合は、「x」を含む列も追加します。 それは私がフォームを作成するときしかし 私はこれらの行を打つためにform.createでそのコードを使用しようと、3欄に をstringrid値といくつかの「X」を読み込む正常に動作しますが、
:-(動作しません。プロパティ行以来for J := 1 to stringGrid1.RowCount-1 do
begin
if stringGrid1.Cells[3,J]='x' then
for I:=1 to 2 do
begin
StringGrid1.Canvas.Font.Style := Font.Style + [fsStrikeOut];
StringGrid1.Canvas.Brush.Color := clBtnFace; // title
StringGrid1.Canvas.FillRect(Rect);
Rect.Top := Rect.Top + 4;
drawText(Canvas.Handle, PChar(StringGrid1.Cells[I, J]), -1, Rect, DT_CENTER);
StringGrid1.Invalidate;
end
else
begin
StringGrid1.Canvas.Font.Style := Font.Style - [fsStrikeOut];
StringGrid1.Canvas.Brush.Color := clBtnFace; // title
StringGrid1.Canvas.FillRect(Rect);
Rect.Top := Rect.Top + 4;
drawText(Canvas.Handle, PChar(StringGrid1.Cells[I, J]), -1, Rect, DT_CENTER);
StringGrid1.Invalidate;
end;
end;
任意のアイデア???
あなたの描画コードは大丈夫ですが、全体的なアイデアは機能しません。あなたが描いたストライクスルーテキストは消去され、セルはデフォルトスタイルで再描画されます。 OnDrawCellハンドラを記述し、すべてのセルを描画する必要があります。 –
FCのコメントに加えて、OnMouseDownハンドラは単にデータの状態を更新し、再描画を呼び出して再描画をトリガーする必要があります。 OnDrawCellハンドラは、描画中のセルに対してストライクスルーを使用するかどうかを決定するために、この状態を調べる必要があります。 –
あなたは* selection *に興味がありません。あなたはマウスがクリックされた場所に興味があります。 'StringGrid1.Selection.Top'を' StringGrid1.MouseCoord(X、Y).Y'に置き換えてください。それらのうちの2つがあります(もちろん、後者には「j」を使用できます)。 –