CancelBtnClick(Sender);
exit;
end else begin
ActivePage:= FindNextPage(ActivePage, True, false);
if ActivePage.PageIndex=PageCount-1 then Next.Caption:= 'Finish';
Prev.Enabled:= true;
if TBPgFrm(Frms[i]).PgInit then Next.Enabled:= true
else PrevClick(Sender);
end else Next.Enabled:= true;
end;
procedure TPagesDlg.PrevClick(Sender: TObject);
begin
Prev.Enabled:= false;
with PageControl1 do begin
ActivePage:= FindNextPage(ActivePage, false, false);
Prev.Enabled:= ActivePage.PageIndex>0;
end;
Next.Caption:= 'Next';
Next.Enabled:= true;
end;
end.
unit Unit3; //Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ Ρ RadioGroup.
interface
uses ...
type TBPgFrm3 = class(TBPgFrm)
RadioValid: TRadioGroup;
public
function PgValid: boolean; override;
end;
implementation
{$R *.DFM}
function TBPgFrm3.PgValid: boolean;
begin
result:= RadioValid.ItemIndex=0;
end;
end.
unit Unit4; // Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ Ρ CheckBox.
interface
uses ...
type TBPgFrm2 = class(TBPgFrm)
CheckValid: TCheckBox;
public
function PgValid: boolean; override;
end;
implementation
{$R *.DFM}
function TBPgFrm2.PgValid: boolean;
begin
result:= CheckValid.Checked;
end;
end.
Π Delphi 4 ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠΊΠΈΠ½Π³Π° Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠΎΡΠΌ, Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ DockSite, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ Π½Π° TPageControl. ΠΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΡ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ TFormLoader ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ VG Library.
IMHO ΡΠ°ΠΉΠ» *.dfm β ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅ΡΡΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ ΡΠΎΡΠΌΡ. Π ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΊΠ°ΠΊ-ΡΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎΡ ΡΠ΅ΡΡpΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅?
Nomadic ΡΠΎΠ²Π΅ΡΡΠ΅Ρ:
1. File|Openβ¦ Π’Π²ΠΎΡΠ€ΠΎΡΠΌΠ°.DFM β ΡΠ²ΠΈΠ΄ΠΈΡΡ ΡΠ΅ΠΊΡΡ;
2. Β«Delphi\bin\convert Π’Π²ΠΎΡΠ€ΠΎΡΠΌΠ°.DFMΒ» β ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π’Π²ΠΎΡΠ€ΠΎΡΠΌΠ°.TXT (ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ).
ΠΠ΄Π΅Ρ Π² ΠΌΠ°ΡΡΡ: Π² DN/VC/NC ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ viewer'ΠΎΠΌ .DFM .BAT'Π½ΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°ΠΆΠ΅Ρ convert;wpview;del β ΠΈ Π·Π°Π³Π»ΡΠ΄ΡΠ²Π°ΡΡ Π² .DFM Π½Π΅ ΠΎΡΠΊΡΡΠ²Π°Ρ Delphi.
ΠΡΡΠ°ΡΠΈ, ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π»ΠΈΡΠ½ΡΡ ΡΠ΅Π»ΡΡ :)
CLASSES.PAS:
[β¦]
{ Object conversion routines }
procedure ObjectBinaryToText(Input, Output: TStream);
procedure ObjectTextToBinary(Input, Output: TStream);
procedure ObjectResourceToText(Input, Output: TStream);
procedure ObjectTextToResource(Input, Output: TStream);
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΡΠΌΡ
ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π·Π½Π°Π΅Ρ ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠΎΡΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅Π΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ²), ΠΊΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ²ΠΎΠΉΡΡΠ² Form.Top ΠΈ Form.Left?
ΠΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ:
1. WM_WINDOWPOSCHANGING (Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ),
2. WM_WINDOWPOSCHANGED (Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ), ΠΈΠ»ΠΈ
3. WM_MOVE (Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ)
β Robert Wittig
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ β ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠΎΡΠΌΡ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, "ΠΠ°Π²ΠΈΠ³Π°ΡΠΎΡ", ΠΈ, ΠΎΡΠΊΡΡΠ²Π°Ρ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΌΡ, ΠΈΠΌΠ΅ΡΡ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΎΡΠΌΠ΅ "ΠΠ°Π²ΠΈΠ³Π°ΡΠΎΡ"?
Nomadic ΡΠΎΠ²Π΅ΡΡΠ΅Ρ:
ΠΠ±ΠΌΠ°Π½ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΅.
procedure ShowAlmostModal(FormModal:TForm);
begin
NavigatorForm.Enabled:=false;
FormModal.ShowModal
end;
Π Π²ΠΎΡ ΡΡΠΎ ΠΏΡΠΈΠ²Π΅ΡΡ Π½Π° OnShow ΠΏΠΎΡΡΠΈ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ
procedure FormShow(Sender:Tobject);
begin
NavigatorForm.Enabled:=true;
end;
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠΊΠ½Π° Π½Π΅ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌΠΈ?
Nomadic ΡΠΎΠ²Π΅ΡΡΠ΅Ρ:
ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅Π³ΠΈΠΎΠ½ Π½ΡΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ ΠΈ Π²ΡΠ·Π²Π°ΡΡ SetWindowRgn β
HRGN rgn := CreateEllipticRgn(10,10,100,100);
SetWindowRgn(hMyWnd,rgn); // ΠΠΎΡ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΊΡΡΠ³Π»ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ
ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ΅Π³ΠΈΠΎΠ½ ΡΡΠΎΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Windows ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΎΠΊΠ½Π°.
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π²ΠΎΡ ΡΡΠΎΡ ΠΎΠ±pΠ°Π±ΠΎΡΡΠΈΠΊ OnCreate : ΠΠ° ΠΌΠ΅Π½Ρ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π»ΠΎ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅.
procedure TForm1.FormCreate(Sender: TObject);
const W=36*pi/180;
var
R,R1,R2: HRgn;
X,Y,i:integer;
function S(a:integer;R:integer):integer;
begin
Result:=round(R*sin(W*a));
end;
function C(a:integer;R:integer):integer;
begin
Result:=round(R*cos(W*a));
end;
function GetStarReg(X,Y,R:integer):HRGN;
var P : array [0..4] of TPoint;
begin
P[0] := Point(X, Y-R);
P[1] := Point(X-S(4,R), Y-C(4,R));
P[2] := Point(X-S(8,R), Y-C(8,R));
P[3] := Point(X-S(2,R), Y-C(2,R));
P[4] := Point(X-S(6,R), Y-C(6,R));
Result := CreatePolygonRgn(P, 5, WINDING);
end;
begin
X:=Width div 2;
Y:=Height div 2;
R:=GetStarReg(X,Y,100);
i:=1;
repeat
R1:=GetStarReg(X-S(i,120),Y-C(i,110),40);
CombineRgn(R,R,R1,RGN_OR);
inc(i,2);
until i>9;
R1:=GetStarReg(X,Y,30);
CombineRgn(R,R,R1,RGN_DIFF);
R1:=CreateEllipticRgn(3,3,Width-6,Height-6);
R2:=CreateEllipticRgn(20,10,Width-20,Height-10);
CombineRgn(R1,R1,R2,RGN_DIFF);
CombineRgn(R,R,R1,RGN_OR);
SetWindowRgn(Handle, R, True);
end;
ΠΠ°ΠΊ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Close [Γ] Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠ½Π°?
Nomadic ΡΠΎΠ²Π΅ΡΡΠ΅Ρ:
ΠΠΎΡ ΠΊΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅Π»Π°Π΅Ρ Π²ΡΠ΅, ΡΡΠΎ ΡΠ΅Π±Π΅ Π½ΡΠΆΠ½ΠΎ:
procedure TForm1.FormCreate(Sender: TObject);
var Style: Longint;
begin
Style := GetWindowLong(Handle, GWL_STYLE);
SetWindowLong(Handle, GWL_STYLE, Style And Not WS_SYSMENU);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = VK_F4) and (ssAlt in Shift) then begin
MessageBeep(0);
Key := 0;
end;
end;
{ Disable close button }
procedure TForm1.Button1Click(Sender: TObject);
var SysMenu: HMenu;
begin
SysMenu := GetSystemMenu(Handle, False);
Windows.EnableMenuItem(SysMenu, SC_CLOSE, MF_DISABLED or MF_GRAYED);
end;
{ Enable close button }
procedure TForm1.Button2Click(Sender: TObject);
begin
GetSystemMenu(Handle, True);
Perform(WM_NCPAINT, Handle, 0);
end;
ΠΠΎ ΡΡΠΎ ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ ΠΈΠ· TaskBar'Π°.
ΠΠ΅ΡΡΠ°Π½ΠΈΠ΅ ΡΠΎΡΠΌΡ
ΠΠ°ΠΊ Π±Ρ ΡΡΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΎΠΊΠ½Π΅ Π±Π΅Π· Π΅Π³ΠΎ Π΄ΡΡΠ°ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°Π½ΠΈΡ ΠΈ Π±Π΅Π· ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ? WM_SETREDRAW Π·Π΄Π΅ΡΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ?
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΊΠΎΠ΄. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΏΠ°ΡΡ BeginUpdate / EndUpdate, ΡΠΎ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠ°ΠΊ TTreeView, ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ»ΡΠΆΠΈΡΡ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΡΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ ΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΡ Β«Π±Π°ΡΠ°Π±Π°ΡΠ΅ΠΊΒ». Π ΡΠ°ΠΊΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ.
procedure BeginScreenUpdate(hwnd : THandle);
begin
if (hwnd = 0) then hwnd := Application.MainForm.Handle;
SendMessage(hwnd, WM_SETREDRAW, 0, 0);
end;
procedure EndScreenUpdate(hwnd : THandle; erase : Boolean);
begin
if (hwnd = 0) then hwnd := Application.MainForm.Handle;
SendMessage(hwnd, WM_SETREDRAW, 1, 0);
RedrawWindow(hwnd, nil, 0, DW_FRAME + RDW_INVALIDATE + RDW_ALLCHILDREN + RDW_NOINTERNALPAINT);
if (erase) then Windows.InvalidateRect(hwnd, nil, True);
end;
β Jeff Johnson
ΠΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
ΠΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ ΠΈΠ· ΠΌΠΎΠ΅ΠΉ ΡΠΎΡΠΌΡ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Ρ.Π΅. ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Π² ΠΌΠΎΠ΅ΠΉ ΡΠΎΡΠΌΠ΅ Π΄ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Ρ ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ±ΡΠ°ΡΡ (ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ) ΠΌΠΎΡ ΡΠΎΡΠΌΡ
Nomadic ΡΠΎΠ²Π΅ΡΡΠ΅Ρ:
function TMyForm.Execute: TModalResult;
begin
Show;
try
SendMessage(Handle, CM_ACTIVATE, 0, 0);
ModalResult := 0;
repeat
Application.HandleMessage;
if Application.Terminated then ModalResult := mrCancel;