線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1851
推到 Plurk!
推到 Facebook!

如何把Delphi的應用程式轉換為ActiveForm元件?

尚未結案
akane
一般會員


發表:16
回覆:0
積分:3
註冊:2003-10-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-14 16:19:03 IP:210.62.xxx.xxx 未訂閱
我們有參考一本書,它的內容是寫說:「首先在ActiveForm的程式單元中uses原先TeeChart的主表格,然後在ActiveForm中宣告一個變數,這個變數是TeeChart主表格類別的物件變數。 fMainForm:TTeeMainForm;這段程式碼便是在ActiveForm主表格中宣告的TEeChart主表格的物件變數。」 我們有(fMainForm:tteeMainForm;)放在type或create,但都是執行錯誤,請問一下這段程式到底要放在那裡??
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-14 16:36:33 IP:202.39.xxx.xxx 未訂閱
參考 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:
  • Create a blank ActiveForm.
  • In the form’s property inspector, add an Create handler like the one shown below:
  • 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; 
    
  • In the uses clause, add a reference to your form’s unit (in this case, Unit1).
  • Add the form’s implementation unit to the project (in this case, Unit1.pas).
  • Add the declaration of ChildForm to your TActiveForm1 class, like this:
    type 
      TActiveForm1 = class ... 
      .... 
      public 
        ChildForm: TForm1; 
        .... 
      end; 
    
  • Compile and test your form.
--- 歡迎光臨 KTop 研究院
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-15 16:39:31 IP:202.39.xxx.xxx 未訂閱
紅色為增加的部份:
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-30 13:45:07 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-01 8:25:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!