home *** CD-ROM | disk | FTP | other *** search
- unit Main;
-
- { Program copyright (c) 1995 by Charles Calvert }
- { Project Name: HEXADDS }
-
- { This program shows what happens to method addresses
- in programs that implement polymorphism. }
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs,
- Messages, Classes, Graphics,
- Controls, Forms, Dialogs,
- StdCtrls;
-
- type
- TForm1 = class(TForm)
- PressMe: TButton;
- Edit1: TEdit;
- Edit2: TEdit;
- ListBox1: TListBox;
- Edit3: TEdit;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Label4: TLabel;
- Label5: TLabel;
- procedure PressMeClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- TParent = class(TEdit)
- published
- procedure Foo; virtual;
- end;
-
- TChild = class(TParent)
- published
- procedure Foo; override;
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- uses
- StrBox;
-
- {$R *.DFM}
-
- procedure TParent.Foo;
- begin
- Form1.ListBox1.Items.Add('ParentFoo called');
- end;
-
- procedure TChild.Foo;
- begin
- Form1.ListBox1.Items.Add('ChildFoo called');
- end;
-
- procedure TForm1.PressMeClick(Sender: TObject);
- var
- P: TParent;
- C: TChild;
- Ptr: Pointer;
- begin
- Label1.Caption := GetHexWord(CSeg);
- C := TChild.Create(Self);
- Ptr := C.MethodAddress('Foo');
- Edit1.Text := Address2Str(Ptr);
- C.Foo;
- P := C;
- Edit2.Text := Address2Str(P.MethodAddress('Foo'));
- P.Foo;
- C.Free;
- P := TParent.Create(Self);
- P.Foo;
- Edit3.Text := Address2Str(P.MethodAddress('Foo'));
- P.Free;
- end;
-
- end.
-