大哥们好, 我在使用DBGrid撷取MySQL的columns时, MySQL里皆用utf8编码, 但截出来后所有的中文都变成乱码(如图), 我用的是delphi 2009 DBE 的TDatabase, 请问这如何解决….底下是程序代码
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, WideStrings, DBXMySql
;type
TForm2 = class(TForm)
Database1: TDatabase;
Table1: TTable;
DataSource1: TDataSource;
Button1: TButton;
DBGrid1: TDBGrid;
Query1: TQuery;
Query1type: TMemoField;
Query1id: TMemoField;
Query1filename: TMemoField;
Query1size: TIntegerField;
Query1time: TIntegerField;
Query1description: TMemoField;
Query1author: TMemoField;
Query1ipnr: TMemoField;
procedure Button1Click(Sender: TObject);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
begin
close();
end;procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
bmp: TBitmap;
OutRect: TRect;begin
with DbGrid1 do
beginCanvas.FillRect(Rect);
OutRect := Rect;
InflateRect(OutRect, -2, -2);
if column.Field is TGraphicField then
begin
bmp := TBitmap.Create;
try
bmp.Assign(Column.Field);
Canvas.StretchDraw(OutRect, Bmp);
finally
bmp.Free;
end;
end
else if Column.Field is TMemoField then
begin
DrawText(Canvas.Handle, Pchar(Column.Field.AsString),
Length(Column.Field.AsString), OutRect, dt_WordBreak or dt_NoPrefix);
end
else
DrawText(Canvas.Handle, Pchar(Column.Field.DisplayText),
Length(Column.Field.DisplayText),
OutRect, dt_WordBreak or dt_NoPrefix);
end;end;end.
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, WideStrings, DBXMySql
;type
TForm2 = class(TForm)
Database1: TDatabase;
Table1: TTable;
DataSource1: TDataSource;
Button1: TButton;
DBGrid1: TDBGrid;
Query1: TQuery;
Query1type: TMemoField;
Query1id: TMemoField;
Query1filename: TMemoField;
Query1size: TIntegerField;
Query1time: TIntegerField;
Query1description: TMemoField;
Query1author: TMemoField;
Query1ipnr: TMemoField;
procedure Button1Click(Sender: TObject);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
begin
close();
end;procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
bmp: TBitmap;
OutRect: TRect;begin
with DbGrid1 do
beginCanvas.FillRect(Rect);
OutRect := Rect;
InflateRect(OutRect, -2, -2);
if column.Field is TGraphicField then
begin
bmp := TBitmap.Create;
try
bmp.Assign(Column.Field);
Canvas.StretchDraw(OutRect, Bmp);
finally
bmp.Free;
end;
end
else if Column.Field is TMemoField then
begin
DrawText(Canvas.Handle, Pchar(Column.Field.AsString),
Length(Column.Field.AsString), OutRect, dt_WordBreak or dt_NoPrefix);
end
else
DrawText(Canvas.Handle, Pchar(Column.Field.DisplayText),
Length(Column.Field.DisplayText),
OutRect, dt_WordBreak or dt_NoPrefix);
end;end;end.
设置下DBGird Font属性的 选择宋体或者其他的中国字体后 右下角有个字符集 一般有 西方 和 chinese_GB2323 这2个属性设置看看