[Π ΡΡΠΎΡΠΎΠ½Ρ: ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠΏΡΠ°Π²ΠΊΠ° Delphi ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (ΡΠ΅ΡΠ΅Π· Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° $N+), ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΠ‘ΠΠ₯ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ 80x87, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΠΏ Real. Π’Π°ΠΊΠΆΠ΅, Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠΏΠΎΠΌ Real, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΈΠ»ΠΈ ΠΆΠ΅ Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅ΠΏΡΠ°Π² Π² Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ! :) ]
ΠΠΎ Π²ΡΡΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π² ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠΏΡΠ°Π²ΠΊΠ΅ Visual Basic Ρ ΡΠ²ΠΈΠ΄Π΅Π», ΡΡΠΎ VB ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ Ρ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Single ΠΈ Double, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠΈΠΏΡ IEEE, ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ Delphi-ΡΠΈΠΏΠ°ΠΌ Single ΠΈ Double. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² ΡΠΏΡΠ°Π²ΠΊΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ Β«Microsoft Binary FormatΒ».
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Π²ΠΎΠΏΡΠΎΡΠ΅, Ρ Β«ΠΎΠΏΡΡΡΠΈΠ»ΡΡΒ» Π΄ΠΎ DOS ΠΈ Π·Π°ΠΏΡΡΡΠΈΠ» QBasic, Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Microsoft QuickBasic, Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΡΠ΅ΠΏΠ΅ΡΡ Π² ΠΏΠΎΡΡΠ°Π²ΠΊΡ DOS. ΠΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π² ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΡ ΡΠΏΡΠ°Π²ΠΊΡ, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
MKSMBF$ ΠΈ MKDMBF$ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡ ΡΠΈΡΠ»Π° ΡΠΎΡΠΌΠ°ΡΠ° IEEE Π² Β«ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈΒ» ΡΠΎΡΠΌΠ°ΡΠ° Microsoft-Binary, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠ° FIELD. CVSMBF ΠΈ CVDMBF ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡ ΡΡΠΈ ΡΡΡΠΎΠΊΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΡΠΈΡΠ»Π° ΡΠΎΡΠΌΠ°ΡΠ° IEEE.
MKSMBF$(Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅-Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠΉ-ΡΠΎΡΠ½ΠΎΡΡΠΈ!)
MKDMBF$(Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅-Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ-ΡΠΎΡΠ½ΠΎΡΡΠΈ#)
CVSMBF (4-Π±Π°ΠΉΡΠΎΠ²Π°Ρ-ΡΠΈΡΠ»ΠΎΠ²Π°Ρ-ΡΡΡΠΎΠΊΠ°)
CVDMBF (8-Π±Π°ΠΉΡΠΎΠ²Π°Ρ-ΡΠΈΡΠ»ΠΎΠ²Π°Ρ-ΡΡΡΠΎΠΊΠ°)
Π€ΡΠ½ΠΊΡΠΈΡ ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ MKSMBF$ 4-Π±Π°ΠΉΡΠΎΠ²Π°Ρ ΡΡΡΠΎΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΠΈΡΠ»ΠΎ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ Microsoft-Binary-format MKDMBF$ 8-Π±Π°ΠΉΡΠΎΠ²Π°Ρ ΡΡΡΠΎΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΠΈΡΠ»ΠΎ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ Microsoft-Binary-format CVSMBF Π§ΠΈΡΠ»ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ IEEE CVDMBF Π§ΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ IEEEΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ ΠΏΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΠΉ Basic.
Π‘ΡΠΌΠΌΠΈΡΡΡ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΡΡ 3 ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π²Π°ΡΠΈΠΌ Β«MetaStockΒ»-ΡΠ°ΠΉΠ»Π°ΠΌ:
1. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² QBasic/DOS
2. ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ Π·Π°ΠΌΠ΅Π½Ρ (Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ Delphi) Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ Π²ΡΡΠ΅.
3. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΠΌΠΈ. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΠΉΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΡΡΠ°ΡΡΡ ΡΠΈΠΏΠΎΠ² Single ΠΈ Double, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²ΡΠΈΡ ΡΡ Π² Β«Microsoft Binary FormatΒ», Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΠΉ MS Basic.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
Delphi 1
ΠΠ°, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ±ΡΡΠ²ΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΡΠ΅ΠΊΡΠΈΠΈ const, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
procedure p;
const MyVariable : Integer = 0;
begin
Inc(MyVariable);
end;
Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ MyVariable ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ·ΠΎΠ²ΠΎΠ² P.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΎ Π»ΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π·Π°ΠΌΠ΅Π½ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Π΅ΡΠ»ΠΈ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ).
Π Π°Π·Π½ΠΎΠ΅
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°
ΠΡΡΡΡΡΠΉ ΠΈ Π»Π΅Π³ΠΊΠΈΠΉ ΠΏΡΡΡ Π²ΠΊΠ»/Π²ΡΠΊΠ» Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠ΅ΡΡ Borland pascal.
{$R+,L+} {ΠΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΠ»ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ}
{{$R+,L+} {ΠΡΠ° ΡΡΡΠΎΠΊΠ° β Π΄Π²Π° ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ?}
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ:
{$DEFINE DEVEL}
{$IFDEF DEVEL}
β¦β¦
{$ELSEIF}
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ Β«develΒ» ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π° Π½Π΅-Β«develΒ» Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΡΡΡΠΌ ΠΏΡΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²ΡΠΎΡΠΎΠΉ ΡΠΊΠΎΠ±ΠΊΠΈ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡ Π²Π°ΠΌ ΠΊΠ»ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
Π’Π°ΠΊΠΆΠ΅ Π΄Π»Ρ ΡΠΊΠΎΡΠΎΡΡΠ½ΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΈΠΉ ΠΈ ΠΊΡΠ°ΡΠΊΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π·Π° ΡΡΡΠΎΠΊΠΎΠΉ:
if i=0 then inc(i); {Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅+ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ}
ΡΡ.
{ if i=0 then inc(i); {Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠ΅Π½Π° Π²ΡΡ ΡΡΡΠΎΠΊΠ°}
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ β Π΄Π²Π° Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΈΠ³ΡΡΠ½ΠΎΠΉ ΡΠΊΠΎΠ±ΠΊΠΈ ΠΈΠ»ΠΈ Π΄Π΅ΡΡΡΠΎΠΊ Π½Π°ΠΆΠ°ΡΠΈΠΉ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ (* *) Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠΎΠΊΠΈ. ΠΠ»Π°Π²ΠΈΡΠ° Del ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π²Π΅ΡΠ½ΡΡΡΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
β P Gallagher
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΊΠ»Π°ΡΡ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ° I
ΠΠ½Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΊΠ»Π°ΡΡ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ TLabel), ΡΠΎ ΠΌΠ½Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΊΠ»Π°ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΊΠ»Π°ΡΡ TLabel) Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠ½Π΅ Π΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΠΊΠ΅ΠΌ-ΡΠΎ Π΅ΡΠ΅.
ΠΠ»Π°ΡΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΠ΄Π΅Ρ ΡΠ΅ΡΡ, Π² Delphi Π½Π΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ (Π΅Π³ΠΎ Π½Π΅Ρ Π² ΠΏΠ°Π»ΠΈΡΡΠ΅), ΠΏΠΎΡΡΠΎΠΌΡ GetClass('TLabel') Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠ° ΡΡΡΠ΅ΡΡΠ²ΡΡΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· RTTI. ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ ΡΡΠΎΠΌΡ, Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ΡΠ΅Π· RTTI - Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²ΡΡ ΠΎΠ΄.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΊΠ»Π°ΡΡ ΠΈ Π½Π°Π·Π½Π°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°. ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ², ΡΡΠΎΠ±Ρ Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΊΠ»Π°ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ TClass.
type TLabelClass = class of TLabel;
procedure TForm1.Button1Click(Sender: TObject);
var
Ref : TLabelClass;
New : TLabel;
begin
Ref := TLabelClass(Label1.ClassType);
New := Ref.Create(Self);
New.Parent := Self;
New.Caption := 'Π€Π°Π½ΡΠ°ΡΡΠΈΠΊΠ°!';
end;
Π Π΅ΠΏΠ»ΠΈΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π²ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ². ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Assign (ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Π²Π°ΡΠΈ ΠΊΠ»Π°ΡΡΡ Π±ΡΠ»ΠΈ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°ΠΌΠΈ TPersistent). ΠΠ°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Assign, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ Ρ TPersistentClass:
New.Assign(Label1);
ΠΡΠΎΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° (ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Π²Π°ΡΠΈ ΠΊΠ»Π°ΡΡΡ ΡΠ²Π»ΡΠ»ΠΈΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°ΠΌΠΈ TComponent, ΠΈ ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ).
Π Π²Π°ΡΠ΅ΠΌ Π²ΠΎΠΏΡΠΎΡΠ΅ Π²Ρ ΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΈ ΠΈΠ· Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ; ΠΊΠ»Π°ΡΡΡ ΠΌΠΎΠ³ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π ΠΠ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² ΠΠ°Π»ΠΈΡΡΠ΅ ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²; ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΈ Π΄Π²Π΅ Π²Π΅ΡΠΈ ΡΠ²ΡΠ·Π°Π½Ρ, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Ρ Π²Π°Ρ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ:
TCustomer = class(TComponent)
private
FCompany: string;
FPhone : LongInt;
published
property Company: string read FCompany write FCompany;
property Phone: LongInt read FPhone write FPhone;
end;
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
RegisterClass(TCustomer);
ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π½Π°ΡΡ ΠΊΠ°ΠΊ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π΄Π»Ρ TCustomer, Π½ΠΎ Π½Π΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ Π² ΠΠ°Π»ΠΈΡΡΠ΅ ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ², Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
procedure TForm1.Button1Click(Sender: TObject);
var
Ref: TComponentClass;
New: TComponent;
Stream: TMemoryStream;
begin
Ref := TComponentClass(Label1.ClassType);
New := Ref.Create(Self);
Stream := TMemoryStream.Create;
try
Stream.WriteComponent(Label1);
Stream.Position := 0;
Stream.ReadComponent(New);
finally
Stream.Free;
end;
end;
β Rick Rogers
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΊΠ»Π°ΡΡ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ° II
ΠΠ½Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΊΠ»Π°ΡΡ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ°β¦
TObject.ClassType
var
ClassRef: TComponentClass;
NewComp: TComponent;
begin
TClass(ClassRef) := Sender.ClassType;
NewComp := ClassRef.Create(Self);
β¦
β Pat Ritchey
Π Π°Π±ΠΎΡΠ° Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ Π² Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΊΡΡΠΊΠ΅ ΠΊΠΎΠ΄Π°
Delphi 1
Π ΠΠ°ΡΠΊΠ°Π»Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ 2 ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ β {} ΠΈ (* *). ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π² Π΄ΡΡΠ³ΠΎΠΉ (ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΡ). Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²ΡΡΠ°Π²Π»ΡΡ (* Π² Π½Π°ΡΠ°Π»Π΅ Π²Π°ΡΠ΅Π³ΠΎ Π±Π»ΠΎΠΊΠ°, ΠΈ *) Π² ΠΊΠΎΠ½ΡΠ΅, Π²Ρ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ ΡΠΈΠΏΠ° { }.
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΠ°Π»ΡΠΊΡΠ»ΡΡΠΈΡ
ΠΠΎΠ΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΠΎΠ·ΡΠ°ΡΡΠ°
Delphi 1
ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ (Fields Editor), Π΄Π²Π°ΠΆΠ΄Ρ ΡΠ΅Π»ΠΊΠ½ΡΠ² Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ TTable ΠΈΠ»ΠΈ TQuery, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π½Π° Π²Π°ΡΠ΅ΠΉ ΡΠΎΡΠΌΠ΅ (ΠΈΠ»ΠΈ Π²ΡΠ±ΡΠ°Π² Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Ρ ΠΏΡΠ½ΠΊΡ Fields Editor). ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠΎΡΠΌΠ΅ (Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ, Π½ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ Π½ΠΈΠΌ Π΄ΠΎΡΡΡΠΏ β Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ visible Π² false). ΠΠ°ΡΠ΅ΠΌ ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ Π½Π° Β«Defineβ¦Β» (ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ) Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ. ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΠΈΠΌΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠ΅Π΅ΡΡ ΠΎΡ ΠΈΠΌΠ΅Π½ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠΈΠΏ (Π²Π΅ΡΠΎΡΡΠ½ΠΎ, StringField) ΠΈ Π·Π°Π΄Π°ΠΉΡΠ΅ Π΄Π»ΠΈΠ½Ρ (20 Π±ΡΠ΄Π΅Ρ Π² ΡΠ°ΠΌΡΠΉ ΡΠ°Π·). Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π°ΠΏΡΠΎΡΠΈΠ² ΠΏΠΎΠ»Ρ 'calculated' ΡΡΠΎΠΈΡ Π³Π°Π»ΠΎΡΠΊΠ°. ΠΠ°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° TTable ΠΈΠ»ΠΈ TQuery ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ 'OnCalcFields'. Π ΡΡΠΎΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ Π²Ρ Π±Π΅ΡΠ΅ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ, Π΄Π΅Π»Π°Π΅ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π»ΠΈ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π² TDBGrid, ΠΈΠ»ΠΈ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ TDBText, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΠΌΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΊΠΈ.