Bu hatta sağ tıklatarak stringgrid'deki bir satırdaki tüm hücrelerin metnine vurmak istiyorum. Benim kod hakkında Tamam, ama hattan tıklanan hücre vurulmadı (diğer iyi)!?! Ayrıca, bir satırdaki ilk tıklamak zorunda ve sonra sağa devam etmek tıklayın, sadece sağ tıklayıp istiyorum ama nasıl bilmiyorum: -/ Kodum:stringgrid (delphi) içinde metin vurma
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;
Acayip !! ! Ancak, grevlenmiş durumu kaydetmek istiyorsam, 'x' içeren bir sütun ekliyorum; ben formu oluştururken AMA ben bu satır grev form.create bu kodu kullanmayı deneyin, 3. sütunda stringrid değerini ve bazı 'x' yük çalışıyor ama
:-(çalışmıyor mülkiyet Satırlar yanafor 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;
herhangi bir fikir ???
Çizim kodunuz iyi görünüyor, ancak genel fikir çalışmayacak. Az önce çizdiğiniz metinler silinecek ve hücre varsayılan stil ile yeniden çizilecektir. OnDrawCell işleyicisini yazmalı ve tüm hücrelerini çizmelisin. –
FC'nin yorumuna eklediğinizde, OnMouseDown işleyiciniz verilerinizin durumunu basitçe güncellemeli ve yeniden çizmeyi tetiklemek için Yenile 'yi çağırmalıdır. OnDrawCell işleyiciniz, çizdiği herhangi bir hücre için grevin kullanılıp kullanılmayacağına karar vermek için bu duruma bakmalıdır. –
* Seçim * ile ilgilenmiyorsunuz, fare tıklandığında nereye ilgileniyorsunuz. 'StringGrid1.MouseCoord (X, Y) .Y' ile' StringGrid1.Selection.Top' değiştirin. Onlardan iki tane var (tabii ki 'j' yi ikincisi için kullanabilirsiniz). –