Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΏΠΎ Delphi. ВСрсия 1.0.6Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 14

Автор Π’Π°Π»Π΅Π½Ρ‚ΠΈΠ½ ΠžΠ·Π΅Ρ€ΠΎΠ²

Π‘ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅, 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.