如何把Delphi的應用程式轉換為ActiveForm元件? |
尚未結案
|
akane
一般會員 發表:16 回覆:0 積分:3 註冊:2003-10-08 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
參考 Converting a standard Delphi Form to an ActiveForm:
http://pweb.netcom.com/~cherrman/cvtforms.htm
By Conrad Herrmann, 25 July 1997 People ask me this question often, and there are several
techniques that can do this. The technique that I prefer
is easy to learn and the most flexible. In this technique,
you make your existing Delphi form a child window of an
otherwise ActiveForm. Because it’s a child form, you’ll
have to add code to set some of its properties to reflect
that fact—to remove the window frame, to align it to its
parent’s client area, etc. This approach has several advantages. The first advantage
is that its easy to get up and running—the only thing you
need to do that’s not already done for you is to add code
to create and embed your form in the ActiveForm. Another
advantage is that unlike copying your code to the ActiveForm’s
implementation file, this approach doesn’t change your form’s
implementation at all. The code you’re familiar with is
still familiar. It also means the form’s implementation
unit can still be included in a regular Delphi application
if you so desire.
Steps to convert a Delphi form to an ActiveForm:
Procedure TActiveForm1.FormCreate(Sender: TObject); begin // This code creates a child form that is just a normal // Delphi TForm. // This allows the form to be shown both as a normal // VCL form and as an ActiveForm. ChildForm := TForm1.Create( Self ); ChildForm.Parent := Self; ChildForm.Align := alClient; ChildForm.BorderStyle := bsNone; ChildForm.Visible := True; end; type TActiveForm1 = class ... .... public ChildForm: TForm1; .... end; |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
紅色為增加的部份:
unit ActiveFormImpl1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ActiveX, AxCtrls, ActiveFormProj1_TLB, StdVcl; type TActiveFormX = class(TActiveForm, IActiveFormX) procedure ActiveFormCreate(Sender: TObject); private { Private declarations } FEvents: IActiveFormXEvents; procedure ActivateEvent(Sender: TObject); procedure ClickEvent(Sender: TObject); procedure CreateEvent(Sender: TObject); procedure DblClickEvent(Sender: TObject); procedure DeactivateEvent(Sender: TObject); procedure DestroyEvent(Sender: TObject); procedure KeyPressEvent(Sender: TObject; var Key: Char); procedure PaintEvent(Sender: TObject); protected { Protected declarations } procedure DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage); override; procedure EventSinkChanged(const EventSink: IUnknown); override; function Get_Active: WordBool; safecall; function Get_AutoScroll: WordBool; safecall; function Get_AutoSize: WordBool; safecall; function Get_AxBorderStyle: TxActiveFormBorderStyle; safecall; function Get_Caption: WideString; safecall; function Get_Color: OLE_COLOR; safecall; function Get_Cursor: Smallint; safecall; function Get_DoubleBuffered: WordBool; safecall; function Get_DropTarget: WordBool; safecall; function Get_Enabled: WordBool; safecall; function Get_Font: IFontDisp; safecall; function Get_HelpFile: WideString; safecall; function Get_KeyPreview: WordBool; safecall; function Get_PixelsPerInch: Integer; safecall; function Get_PrintScale: TxPrintScale; safecall; function Get_Scaled: WordBool; safecall; function Get_Visible: WordBool; safecall; function Get_VisibleDockClientCount: Integer; safecall; procedure _Set_Font(const Value: IFontDisp); safecall; procedure Set_AutoScroll(Value: WordBool); safecall; procedure Set_AutoSize(Value: WordBool); safecall; procedure Set_AxBorderStyle(Value: TxActiveFormBorderStyle); safecall; procedure Set_Caption(const Value: WideString); safecall; procedure Set_Color(Value: OLE_COLOR); safecall; procedure Set_Cursor(Value: Smallint); safecall; procedure Set_DoubleBuffered(Value: WordBool); safecall; procedure Set_DropTarget(Value: WordBool); safecall; procedure Set_Enabled(Value: WordBool); safecall; procedure Set_Font(var Value: IFontDisp); safecall; procedure Set_HelpFile(const Value: WideString); safecall; procedure Set_KeyPreview(Value: WordBool); safecall; procedure Set_PixelsPerInch(Value: Integer); safecall; procedure Set_PrintScale(Value: TxPrintScale); safecall; procedure Set_Scaled(Value: WordBool); safecall; procedure Set_Visible(Value: WordBool); safecall; public { Public declarations } procedure Initialize; override; end; implementation uses ComObj, ComServ, Unit1; var ChildForm: TForm1; {$R *.DFM} { TActiveFormX } procedure TActiveFormX.DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage); begin { Define property pages here. Property pages are defined by calling DefinePropertyPage with the class id of the page. For example, DefinePropertyPage(Class_ActiveFormXPage); } end; procedure TActiveFormX.EventSinkChanged(const EventSink: IUnknown); begin FEvents := EventSink as IActiveFormXEvents; end; procedure TActiveFormX.Initialize; begin inherited Initialize; OnActivate := ActivateEvent; OnClick := ClickEvent; OnCreate := CreateEvent; OnDblClick := DblClickEvent; OnDeactivate := DeactivateEvent; OnDestroy := DestroyEvent; OnKeyPress := KeyPressEvent; OnPaint := PaintEvent; end; function TActiveFormX.Get_Active: WordBool; begin Result := Active; end; function TActiveFormX.Get_AutoScroll: WordBool; begin Result := AutoScroll; end; function TActiveFormX.Get_AutoSize: WordBool; begin Result := AutoSize; end; function TActiveFormX.Get_AxBorderStyle: TxActiveFormBorderStyle; begin Result := Ord(AxBorderStyle); end; function TActiveFormX.Get_Caption: WideString; begin Result := WideString(Caption); end; function TActiveFormX.Get_Color: OLE_COLOR; begin Result := OLE_COLOR(Color); end; function TActiveFormX.Get_Cursor: Smallint; begin Result := Smallint(Cursor); end; function TActiveFormX.Get_DoubleBuffered: WordBool; begin Result := DoubleBuffered; end; function TActiveFormX.Get_DropTarget: WordBool; begin Result := DropTarget; end; function TActiveFormX.Get_Enabled: WordBool; begin Result := Enabled; end; function TActiveFormX.Get_Font: IFontDisp; begin GetOleFont(Font, Result); end; function TActiveFormX.Get_HelpFile: WideString; begin Result := WideString(HelpFile); end; function TActiveFormX.Get_KeyPreview: WordBool; begin Result := KeyPreview; end; function TActiveFormX.Get_PixelsPerInch: Integer; begin Result := PixelsPerInch; end; function TActiveFormX.Get_PrintScale: TxPrintScale; begin Result := Ord(PrintScale); end; function TActiveFormX.Get_Scaled: WordBool; begin Result := Scaled; end; function TActiveFormX.Get_Visible: WordBool; begin Result := Visible; end; function TActiveFormX.Get_VisibleDockClientCount: Integer; begin Result := VisibleDockClientCount; end; procedure TActiveFormX._Set_Font(const Value: IFontDisp); begin SetOleFont(Font, Value); end; procedure TActiveFormX.ActivateEvent(Sender: TObject); begin if FEvents <> nil then FEvents.OnActivate; end; procedure TActiveFormX.ClickEvent(Sender: TObject); begin if FEvents <> nil then FEvents.OnClick; end; procedure TActiveFormX.CreateEvent(Sender: TObject); begin if FEvents <> nil then FEvents.OnCreate; end; procedure TActiveFormX.DblClickEvent(Sender: TObject); begin if FEvents <> nil then FEvents.OnDblClick; end; procedure TActiveFormX.DeactivateEvent(Sender: TObject); begin if FEvents <> nil then FEvents.OnDeactivate; end; procedure TActiveFormX.DestroyEvent(Sender: TObject); begin if FEvents <> nil then FEvents.OnDestroy; end; procedure TActiveFormX.KeyPressEvent(Sender: TObject; var Key: Char); var TempKey: Smallint; begin TempKey := Smallint(Key); if FEvents <> nil then FEvents.OnKeyPress(TempKey); Key := Char(TempKey); end; procedure TActiveFormX.PaintEvent(Sender: TObject); begin if FEvents <> nil then FEvents.OnPaint; end; procedure TActiveFormX.Set_AutoScroll(Value: WordBool); begin AutoScroll := Value; end; procedure TActiveFormX.Set_AutoSize(Value: WordBool); begin AutoSize := Value; end; procedure TActiveFormX.Set_AxBorderStyle(Value: TxActiveFormBorderStyle); begin AxBorderStyle := TActiveFormBorderStyle(Value); end; procedure TActiveFormX.Set_Caption(const Value: WideString); begin Caption := TCaption(Value); end; procedure TActiveFormX.Set_Color(Value: OLE_COLOR); begin Color := TColor(Value); end; procedure TActiveFormX.Set_Cursor(Value: Smallint); begin Cursor := TCursor(Value); end; procedure TActiveFormX.Set_DoubleBuffered(Value: WordBool); begin DoubleBuffered := Value; end; procedure TActiveFormX.Set_DropTarget(Value: WordBool); begin DropTarget := Value; end; procedure TActiveFormX.Set_Enabled(Value: WordBool); begin Enabled := Value; end; procedure TActiveFormX.Set_Font(var Value: IFontDisp); begin SetOleFont(Font, Value); end; procedure TActiveFormX.Set_HelpFile(const Value: WideString); begin HelpFile := String(Value); end; procedure TActiveFormX.Set_KeyPreview(Value: WordBool); begin KeyPreview := Value; end; procedure TActiveFormX.Set_PixelsPerInch(Value: Integer); begin PixelsPerInch := Value; end; procedure TActiveFormX.Set_PrintScale(Value: TxPrintScale); begin PrintScale := TPrintScale(Value); end; procedure TActiveFormX.Set_Scaled(Value: WordBool); begin Scaled := Value; end; procedure TActiveFormX.Set_Visible(Value: WordBool); begin Visible := Value; end; procedure TActiveFormX.ActiveFormCreate(Sender: TObject); begin // This code creates a child form that is just a normal // Delphi TForm. // This allows the form to be shown both as a normal // VCL form and as an ActiveForm. ChildForm := TForm1.Create( Self ); ChildForm.Parent := Self; ChildForm.Align := alClient; ChildForm.BorderStyle := bsNone; ChildForm.Visible := True; end; initialization TActiveFormFactory.Create( ComServer, TActiveFormControl, TActiveFormX, Class_ActiveFormX, 1, '', OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL, tmApartment); end.--- 歡迎光臨 KTop 研究院 |
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |