با سلام.
باز هم از اینکه توجه داشتید خیلی ممنونم!
می خواستم یکی دو تا سوال بپرسم!
اول اینکه چرا اکثر دوستان از اشیای ADO برای بانک های اطلاعاتیشون استفاده میکنن؟؟
و اینکه مثلا من که فقط کار با جداول BDE رو یاد دارم چطوری به حیطه ADO وارد بشم؟
ضمنا در مورد کد زیر هم مشکلی دارم که خیلی ممنون میشم اگه کسی علت اشکال اونو بگه!!
البته قبلش عرض میکتم که اشکال مورد نظر در زمان نمایش فرم و اون هم بدون اینکه برنامه اجرا بشه و در واقع در محیط دلفی رخ میده!!! زمانی که بخواهیم قبل از اجرای برنامه اندازه ی ستون ها رو تغییر بدهیم!!
unit hdbgrid;
interface
uses
SysUtils
,Classes
, Controls
, Grids
, DBGrids
, Windows
;
type
TCelPos=record
X:integer;
Y:integer;
end;
THOnCellClikEvent = procedure (Sender: TObject; ACol, ARow, RecNum: Longint) of object;
THOnCellKeyDownEvent = procedure (Sender: TObject; ACol ,ARow:Longint ; var Key: Word; Shift: TShiftState)of object;
THOnCellKeyPressEvent = procedure (Sender: TObject; ACol ,ARow:Longint ;var Key: Char) of object;
THOnCellMouseOutEvent = procedure (Sender: TObject; ACol, ARow: Longint) of object;
THOnCellMouseInEvent = procedure (Sender: TObject; ACol, ARow: Longint) of object;
THOnDrawCellEvent = procedure (Sender: TObject; ACol, ARow: Longint;
Rect: TRect; State: TGridDrawState) of object;
THOnCellHaveMouseChangeEvent = procedure (Sender: TObject; OldCell, NewCell: TCelPos) of object;
THDBgrid = class(TDBGrid)
private
FHCellHaveMouse:TCelPos;
FHOnDrawCell:THOnDrawCellEvent;
FHOnCellClick:THOnCellClikEvent;
FHOnCellKeyDown: THOnCellKeyDownEvent;
FHOnCellKeyPress: THOnCellKeyPressEvent;
FHOnCellMouseOut:THOnCellMouseOutEvent;
FHOnCellMouseIn:THOnCellMouseInEvent;
FHOnCellHaveMouseChange:THOnCellHaveMouseChangeEve nt;
protected
procedure DrawCell(ACol, ARow: Longint;
ARect: TRect; AState: TGridDrawState); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
public
constructor Create(AOwner: TComponent); override;
property HCellHaveMouse:TCelPos read FHCellHaveMouse;
function HCellRect(ACol,ARow:Longint):TRect;
published
property OnDrawCell: THOnDrawCellEvent read FHOnDrawCell write FHOnDrawCell;
property HOnDrawCell: THOnDrawCellEvent read FHOnDrawCell write FHOnDrawCell;
property HOnCellClick: THOnCellClikEvent read FHOnCellClick write FHOnCellClick ;
property HOnCellMouseOut: THOnCellMouseOutEvent read FHOnCellMouseOut write FHOnCellMouseOut;
property HOnCellMouseIn: THOnCellMouseInEvent read FHOnCellMouseIn write FHOnCellMouseIn;
property HOnCellHaveMouseChange: THOnCellHaveMouseChangeEvent read FHOnCellHaveMouseChange write FHOnCellHaveMouseChange;
property HOnCellKeyDown: THOnCellKeyDownEvent read FHOnCellKeyDown write FHOnCellKeyDown;
property HOnCellKeyPress: THOnCellKeyPressEvent read FHOnCellKeyPress write FHOnCellKeyPress;
end;
procedure Register;
implementation
//__________________________________________________ ____________________________
procedure Register;
begin
RegisterComponents('hamid', [thdbgrid]);
end;
//__________________________________________________ _________________________
constructor THDBgrid.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FHCellHaveMouse.X:=1;
FHCellHaveMouse.Y:=1;
end;
//__________________________________________________ _________________________
procedure THDBGrid.DrawCell(ACol, ARow: Integer; ARect: TRect;
AState: TGridDrawState);
begin
inherited;
if Assigned(FHOnDrawCell) then FHOnDrawCell(Self,ACol, ARow,ARect,AState);
end;
//__________________________________________________ ____________________________
function thdbgrid.HCellRect(ACol, ARow:Longint): TRect;
begin
HCellRect:=CellRect(ACol,ARow);
end;
//__________________________________________________ ____________________________
procedure thdbgrid.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited;
if Assigned(FHOnCellKeyDown) then
FHOnCellKeyDown(Self,Col,Row,Key,Shift);
end;
//__________________________________________________ ____________________________
procedure thdbgrid.KeyPress(var Key: Char);
begin
inherited;
if Assigned(FHOnCellKeyPress) then
FHOnCellKeyPress(Self,Col,Row,key);
end;
//__________________________________________________ ____________________________
procedure thdbgrid.MouseMove(Shift: TShiftState; X, Y: Integer);
var
i:integer;
old:TCelPos;
begin
inherited;
old.X:=FHCellHaveMouse.X;
old.Y:=FHCellHaveMouse.Y;
try
if ((y-1) div (DefaultRowHeight+1))<old.Y then
begin
while((FHCellHaveMouse.y>1)and(((y-1) div (DefaultRowHeight+1))<FHCellHaveMouse.y))do
FHCellHaveMouse.y:=FHCellHaveMouse.y-1;
end
else
if (((y-1) div (DefaultRowHeight+1))>old.Y) then
begin
while((FHCellHaveMouse.y<RowCount)and(((y-1) div (DefaultRowHeight+1))>FHCellHaveMouse.y))do
FHCellHaveMouse.y:=FHCellHaveMouse.y+1;
end;
if (x < CellRect(FHCellHaveMouse.X,FHCellHaveMouse.Y).Left ) then
begin
while((FHCellHaveMouse.x>1)and(x<CellRect(FHCellHa veMouse.X,FHCellHaveMouse.Y).Left))do
FHCellHaveMouse.x:=FHCellHaveMouse.x-1;
end
else
if (x > CellRect(FHCellHaveMouse.X+1,FHCellHaveMouse.Y).Le ft) then
begin
while((FHCellHaveMouse.x<ColCount)and(x > CellRect(FHCellHaveMouse.X+1,FHCellHaveMouse.Y).Le ft))do
FHCellHaveMouse.x:=FHCellHaveMouse.x+1;
end;
except
end;
if (old.X<>FHCellHaveMouse.X)or(old.Y<>FHCellHaveMous e.Y) then
begin
if Assigned(FHOnCellMouseOut) then
FHOnCellMouseOut(Self,old.x,old.y);
if Assigned(FHOnCellHaveMouseChange) then
FHOnCellHaveMouseChange(Self,old,FHCellHaveMouse);
if Assigned(FHOnCellMouseIn) then
FHOnCellMouseIn(Self,FHCellHaveMouse.x,FHCellHaveM ouse.y);
end;
end;
//__________________________________________________ ____________________________
procedure thdbgrid.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited;
if Assigned(FHOnCellClick) then
FHOnCellClick(Self,FHCellHaveMouse.x,FHCellHaveMou se.y,DataSource.DataSet.RecNo);
end;
//__________________________________________________ ____________________________
end.
داشت یادم میرفت که در مورد این کد توضیح بدم!
در حقیقت در این یونیت من یه شی جدید از DBGrid به وجود آوردم که خصوصیات بیشتری نسبت به قبل داره!!!!