stringGrid單元格如何換行並且單元格每行字體的顏色都不一樣(200)

  • 主题发起人 主题发起人 jtaiger
  • 开始时间 开始时间
J

jtaiger

Unregistered / Unconfirmed
GUEST, unregistred user!
stringGrid單元格如何換行並且單元格每行字體的顏色都不一樣
 
stringGrid單元格如何換行並且單元格每行字體的顏色都不一樣
 
可以在OnDraw里,自己Textout
 
換行是可以!但是每行的字體顏色都不一樣就不知道怎麼 弄了!
 
换行在KEYPRESS中写if Key = #13 then begin StringGrid1.Row := StringGrid1.Row + 1; end;
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);begin if (ARow mod 2)=0 then StringGrid1.Canvas.Font.Color:=Clred else StringGrid1.Canvas.Font.Color:=ClBlue; //上面代码为设置颜色,自己根据需要设置吧。 StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, Inttostr(ARow) );end;
 
是在單元格裡面換行!每行都要換顏色
 
是在每個單元格裡面換行!每行都要換顏色
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);var SS, tmpS: string; wStr: WideString; RowCount, W1, W2, I: Integer;begin SS := '黄汉测试asdf啊的说法阿斯顿放'; W1 := StringGrid1.Canvas.TextWidth(SS); W2 := (Rect.Right - Rect.Left); RowCount := W1 div W2; if W2 * RowCount <> W1 then Inc(RowCount); //计算需要多少行才可以显示 wStr := SS; W2 := Length(wStr) div RowCount; for I := 0 to RowCount do begin tmpS := Copy(wStr, I * W2+1, W2); if (I mod 2) = 0 then StringGrid1.Canvas.Font.Color := Clred else StringGrid1.Canvas.Font.Color := ClBlue; StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top + I * StringGrid1.Canvas.TextHeight('A'), tmpS); end;end;上面代码中,在将一个字符串分为多行显示的时候,如果是中英文混合的,效果欠佳,还需要改进。
 
呵呵!方格裡面是數據是在別的事件裡面才設置的不過能這樣已經不錯了!我看看能不能改進
 
我差點就把3行合並了
 
解决了分行问题,但没考虑字符串中间可能有回车:procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);var SS, tmpS: string; wStr: WideString; CNV:TCanvas; RowCount,H,I:Integer;begin SS := '黄汉测试asdf啊的说法阿斯顿放'; //测试数据 wStr := SS; CNV:= StringGrid1.Canvas; H:= CNV.TextHeight('A'); RowCount :=0; while wStr<>'' do begin I:=1; While (I<=Length(wStr)) and ( CNV.TextWidth( Copy(wStr,1,I) )<= (Rect.Right-Rect.Left-2)) Do Inc(I); if I<=Length(wStr) Then Dec(I); tmpS := Copy(wStr,1,I); system.Delete(wStr,1,I); if (RowCount mod 2) = 0 then CNV.Font.Color := Clred else CNV.Font.Color := ClBlue; CNV.TextOut(Rect.Left+2, Rect.Top + RowCount*H, tmpS); Inc(RowCount); end;end;
 
請問如何獲取每行的數據?
 
如果我之前已經換行了呢
 
如果你已经换行,想以自己的换行方式来显示,那就使用 #13#10 来判断查找分行符。
 
如何獲取方格裡面是數據?第一行的數據?
 
有個問題!如果我隨時要把數據賦值給單元格呢?
 
SS := '黄汉测试asdf啊的说法阿斯顿放'; //测试数据上面的代码是我的测试代码,你应该写:SS:= StringGrid1.Cell(ACol,ARow)。如果你隨時要把數據賦值給單元格呢? 那你就把数据付给对应的Cell就可以了啊。
 
這樣寫後,是能從新換行,但是原來的數據還是在上面!就是多了原來的數據
 
后退
顶部