ΠΠΈΠ½Π°ΡΠ½ΠΎΠ΅, OLEβ ΠΈΠ»ΠΈ MEMO-ΠΏΠΎΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ .DBF-ΡΠ°ΠΉΠ»Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½ΠΎΠΌΠ΅Ρ (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ OEM), ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° Π±Π»ΠΎΠΊ Ρ Ρ ΡΠ°Π½ΠΈΠΌΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ , .DBF-ΡΠ°ΠΉΠ» Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ (20h) (Π° Π½Π΅ ΡΠΈΡΠ»Π°ΠΌΠΈ).
Π ΡΠ»ΡΡΠ°Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Ρ, Π±Π»ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ²ΠΎΠΈ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ Π² .DBT-ΡΠ°ΠΉΠ»Π΅.
ΠΡΠ»ΠΈ Π²Ρ ΡΠ΄Π°Π»ΡΠ΅ΡΠ΅ ΡΠ΅ΠΊΡΡ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ, OLEβ ΠΈΠ»ΠΈ ΠΠΠO-ΠΏΠΎΠ»Π΅, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ dBASE III PLUS ΠΈ dBASE IV, ΡΠ°Π±Π»ΠΈΡΠ° dBASE 5.0 ΠΏΠΎΠ΄ Windows Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ. dBASE III PLUS Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΠΊΡΡ Π² ΠΊΠΎΠ½Π΅Ρ .DBT-ΡΠ°ΠΉΠ»Π°. Π dBASE III PLUS ΡΠ°Π·ΠΌΠ΅Ρ .DBT-ΡΠ°ΠΉΠ»Π° ΡΠ°ΡΡΠ΅Ρ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π· ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠΈΠΌ ΡΠ΅ΠΊΡΡ Π±ΡΠ» ΡΠ΄Π°Π»Π΅Π½.
ΠΠ°Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π²Π·ΡΡΠ° ΠΈΠ· ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊΠ° ΠΏΠΎ dBASE ΠΏΠΎΠ΄ Windows ("dBASE for Windows Language Reference manual", Appendix C).
ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: Π£ ΠΠ°Ρ Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠΌ ΡΠΈΡΠΌΡ Borland ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΈΡΡ Π² ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ ΠΠΈΡΠ΅Π½Π·ΠΈΠΎΠ½Π½ΠΎΠΌΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠΌ.
Π Π°Π·Π½ΠΎΠ΅
Π‘ΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΈΠ΄Π΅ΠΈ, Π²ΡΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π² Π³ΡΡΠΏΠΏΠ°Ρ Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ ΠΈ ΠΏΡΠΈΡΠ»Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΠ΅. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π°ΡΠ΅Π» Π»ΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, BDE ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½ΠΎΠΌΠ΅Ρ Π²Π΅ΡΡΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Paradox. (Π― Π½Π΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΡΡΡΠΈΡΡΡΡ Π·Π° dBase ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΎΡΠΌΠ°ΡΡ.) ΠΡΡΠΊΠΈΠΉ ΡΠ°Π· ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Database Desktop) BDE ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ Π²Π΅ΡΡΠΈΠΈ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²Π΅ΡΡΠΈΡ ΡΡΡΡΠΊΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ :
(*****************************************************************************
* DbUtils.pas
*
* Π£ΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
*
* Π‘ΠΎΠ·Π΄Π°Π½Π° 09/20/96
*****************************************************************************)
unit Dbutils;
(****************************************************************************)
(****************************************************************************)
interface
(****************************************************************************)
(****************************************************************************)
uses DbTables;
function DbGetVersion(table: TTable): LongInt;
(****************************************************************************)
(****************************************************************************)
implementation
(****************************************************************************)
(****************************************************************************)
uses Db, DbiProcs, DbiTypes, {DbiErrs,} SysUtils;
{---------------------------------------------------------------------------}
(*
* Π¦Π΅Π»Ρ: ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° Π²Π΅ΡΡΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ
* ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ: table (I) β ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠ°Ρ Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ°
* ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠ°Ρ Π²Π΅Π»ΠΈΡΠΈΠ½Π°: Π½ΠΎΠΌΠ΅Ρ Π²Π΅ΡΡΠΈΠΈ
* ΠΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ: EDatabaseError
*)
function DbGetVersion(table: TTable): LongInt;
var
hCursor : hDBICur;
tableDesc: TBLFullDesc;
cName : array[0..255] of char;
begin
{ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ Π² ΡΡΡΠΎΠΊΡ 'Ρ' }
StrPCopy(cName, table.TableName);
{ ΠΏΡΠΎΡΠΈΠΌ BDE ΡΠΎΠ·Π΄Π°ΡΡ Π·Π°ΠΏΠΈΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ }
Check(DbiOpenTableList(table.DBHandle, True, False, cName, hCursor));
{ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΡΡΠΊΡΡΡΠ΅ }
Check(DbiGetNextRecord(hCursor, dbiNOLOCK, @tableDesc, nil));
{ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΏΠΎΠ»Π΅ Π·Π°ΠΏΠΈΡΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ Π½ΠΎΠΌΠ΅Ρ Π²Π΅ΡΡΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ Π½Π°ΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ }
Result:= tableDesc.tblExt.iRestrVersion;
Check(DbiCloseCursor(hCursor));
end;
end.
ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ
ΠΠ΄Π΅ΡΡ Ρ ΠΏΡΠΈΠ²ΠΎΠΆΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΈΡ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ: DB, DBTables, DbiProcs,DbiErrs, ΠΈ DbiTypes. ΠΠ°ΠΌ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ, ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ, ΠΊΡΠ΄Π° Π±ΡΠ΄Π΅Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Π° ΠΈΡΡ ΠΎΠ΄Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΈ BDE ΡΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ. ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ BDE ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΊΠ°ΠΊ ΡΠ°ΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ, ΡΠ°ΠΊ ΠΈ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½Π΅ΠΉ (ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΈ Ρ.ΠΏ.). ΠΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π±ΡΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΄Π°Π»ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ Ρ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠΎΡΠΌΠΎΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΌΠΈ ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. (ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ Π² ΡΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ). ΠΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ Π½Π° Π·Π΄ΠΎΡΠΎΠ²ΡΠ΅!
procedure TConvertForm.CopyTable(FromDir, SrcTblName, ToDir, DestTblName: String);
var
DBHandle: HDBIDB;
ResultCode: DBIResult;
Src, Dest, Err: Array[0..255] of char;
SrcTbl, DestTbl: TTable;
begin
SrcTbl:= TTable.Create(Application);
DestTbl:= TTable.Create(Application);
try
SrcTbl.DatabaseName:= FromDir;
SrcTbl.TableName:= SrcTblName;
SrcTbl.Open;
DBHandle:= SrcTbl.DBHandle;
SrcTbl.Close;
ResultCode:= DbiCopyTable(DBHandle,false,
StrPCopy(Src,FromDir + '\' + SrcTblName), nil, StrPCopy(Dest,ToDir + '\' + DestTblName));
if (ResultCode <> DBIERR_NONE) then begin
DbiGetErrorString(ResultCode,Err);
raise EDatabaseError.Create('ΠΡΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ' + FromDir + '\' + SrcTblName + ' Π² ' + ToDir + '\' + DestTblName + ' ,' + 'BDE ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» ΠΎΡΠΈΠ±ΠΊΡ ''' + StrPas(Err) + '''');
end;
finally
SrcTbl.Free;
DestTbl.Free;
end;
end;
procedure TConvertForm.DeleteTable(Dir, TblName: String);
var
DBHandle: HDBIDB;
ResultCode: DBIResult;
tbl, Err: Array[0..255] of char;
SrcTbl, DestTbl: TTable;
SrcTbl:= TTable.Create(Application);
try
SrcTbl.DatabaseName:= Dir;
SrcTbl.TableName:= TblName;
SrcTbl.Open;
DBHandle:= SrcTbl.DBHandle;
SrcTbl.Close;
ResultCode:= DbiDeleteTable(DBHandle, StrPCopy(Tbl,Dir + '\' + TblName), nil);
if (ResultCode <> DBIERR_NONE) then begin
DbiGetErrorString(ResultCode,Err);
raise EDatabaseError.Create('Π£Π΄Π°Π»ΡΡ ' + Dir + '\' + TblName + ', BDE ' + 'ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» ΠΎΡΠΈΠ±ΠΊΡ ''' + StrPas(Err) + '''');
end;
finally
SrcTbl.Free;
end;
end;
ΠΡΠΎΠΊΡΡΡΠΊΠ° ΡΠ°Π±Π»ΠΈΡΡ: Ρ ΠΈΡΡΠΎΡΡΡ PeekMessage()
ΠΠ° Π΄Π½ΡΡ Ρ ΡΠ΅ΡΠΈΠ» ΠΏΠΎΠΈΠ³ΡΠ°ΡΡ Ρ API-ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ PeekMessage(). Π€ΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΎ Π»ΠΎΠ²ΠΈΡΡ Π΅Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
Π― ΠΏΡΠΎΠΊΡΡΡΠΈΠ²Π°Ρ ΡΠ°Π±Π»ΠΈΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π½Π°Π±ΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ . "ΠΠΎΠΈΡΠΊ" Π² Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΊΡΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΡΡΠ»ΠΎΠ²ΠΈΠΌΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ "ΠΏΠΎΠΈΡΠΊΠΎΠΌ" ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΡΠ° Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠΊΡΠΎΠ»Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π·Π°ΠΏΠΈΡΡ, Π±Π»ΠΈΠΆΠ°ΠΉΡΠ°Ρ ΠΊ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΏΠΎΠ»ΠΎΡΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ). ΠΠΎΠ·Π½ΠΈΠΊΠ»Π° Π·Π°Π΄Π°ΡΠ°: Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ "ΠΏΠΎΠΈΡΠΊ" (ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΡ) ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π·Π°ΠΏΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠΊΡΠΎΠ»Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ β ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΠΊΡΠΎΠ»Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, "ΠΏΠΎΠΈΡΠΊ" Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ. ΠΡΠ°ΠΊ, ΠΊΠΎ ΠΌΠ½Π΅ Π² Π³ΠΎΠ»ΠΎΠ²Ρ ΠΏΡΠΈΡΠ»Π° ΠΌΡΡΠ»Ρ, ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ PeekMessage() ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ»ΠΎΠ²ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠΈΡΠΊ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ. ΠΠ²ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΡΠ΅ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
Π― ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» ΡΠΈΠ»ΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½Π° WM_MOUSEFIRST/LAST. Π‘ΠΈΡΡΠ°ΡΠΈΡ: ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎ ΠΏΡΠΎΠΊΡΡΡΠΈΠ²Π°Π΅Ρ DBGrid Π²Π½ΠΈΠ·, Ρ.Π΅. Π΄Π΅ΡΠΆΠΈΡ Π½Π°ΠΆΠ°ΡΠΎΠΉ Π½ΠΈΠΆΠ½ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΠΊΡΠΎΠ»Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ PeekMessage() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ False β Π½Π°Ρ ΡΡΠΎ Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ, ΡΡΠΎ Π½Π΅ ΡΠΎ, ΡΡΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ. ΠΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ²Π΅ΡΡ ΡΠΊΠΎΡΠΎΡΡΠ½ΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ ΠΌΡΡΡΡ.
ΠΡΠ»ΠΈ Π² ΡΠΈΠ»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ 0 ΠΈ 0, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΉΠΌΠ°ΡΡ Π»ΡΠ±ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ True. ΠΡΠΈΡΠΈΠ½Π°, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π»ΡΠ±ΠΎΠΉ ΡΠ΅Π»ΡΠΎΠΊ ΠΌΡΡΠΈ Π² ΠΎΠ±Π»Π°ΡΡΠΈ DBGrid Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΠ±ΠΎΠΉΠ΄Π΅ΡΡΡ Π±Π΅Π· ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΉ, Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ PAINT ΡΡΠΊΠΈΠΉ ΡΠΎΠΌΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ PeekMessage ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ True Π² Π»ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎ ΡΠΎΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΡΡ.
ΠΡΠ»ΠΎ Π±Ρ Ρ ΠΎΡΠΎΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ DBGrid ΠΏΠΎΠ»ΡΡΠ°Π» ΡΠΎΠ±ΡΡΠΈΠ΅ OnMouseUp() Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ ΡΠΊΡΠΎΠ»Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ±ΠΈΠ΄Π½ΠΎ, Π½ΠΎ OnMouseUp() ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ DBGrid, Π° Π½Π΅ Ρ ΠΏΠΎΠ»ΠΎΡΠ°ΠΌΠΈ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ. OnMouseUp() Ρ TForm ΠΏΡΠΈ KeyPreview:=true Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ».
ΠΠΎΡΠ»Π΅ ΠΏΡΠΈΡΠ»Π° ΠΈΠ΄Π΅Ρ ΠΎΠΏΡΠΎΡΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ GetKeyState(). ΠΠΎΠΊΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π°ΠΆΠ°ΡΠ° (DOWN), "ΠΏΠΎΠΈΡΠΊ" Π·Π°ΠΏΡΠ΅ΡΠ΅Π½, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. UP (ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΎΡΠΆΠ°ΡΠ°) ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ± ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠΊΡΠΎΠ»Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠΊΠ½ΠΎΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ Ρ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΡΠΎΠΉ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π» Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠ΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅: ΠΏΠΎΠΈΡΠΊΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈ ΡΠ°Π±Π»ΠΈΡΠ½ΡΠΉ ΠΊΡΡΡΠΎΡ ΡΠ°ΠΊΠΆΠ΅ Π½ΠΈΠΊΡΠ΄Π° Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
Π Π°ΡΡΠΌΠΎΡΡΠ΅Π½Π½Π°Ρ ΡΠ΅ΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠΎΠ»ΠΎΡΠ°ΠΌ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ, Π° ΡΠΎΠ±ΡΡΠΈΡ OnKeyUp() ΠΈ OnMouseUp() ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π³Π΄Π΅-Π½ΠΈΠ±ΡΠ΄Ρ Π΅ΡΠ΅.
BDE
ΠΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ
ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΌ ΠΏΡΡΠ΅ΠΌ
ΠΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Π²ΠΎΠΏΡΠΎΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΠ‘ΠΠΠΠΠΠΠΠΠ Π±Π°Π· Π΄Π°Π½Π½ΡΡ Π² Π²Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ .
ΠΠ½Π΅ Delphi ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ² ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ BDECFG.EXE. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ TDatabase, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ, Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π² IDAPI.CFG.