請問如何把Delphi .pas轉成BCB6 .cpp |
尚未結案
|
myboss
一般會員 發表:25 回覆:42 積分:13 註冊:2004-01-13 發送簡訊給我 |
請問諸位先進,由於公司要求,需要一個可資料感知之Datetimepicker
上Delphi深度歷險找到一個ALDate元件,可是不懂得如何模仿修改成BCB6版
ALDate.pas內容如下 unit ALDate; { This class is inherithed from TDataTimePicker and link to a table. In addition to component original there are two additional properties: Datasource and Datafield Alejandro Castro calfra@mail.internet.com.mx } interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls,DB,DBCtrls; type TALDate = class(TDateTimePicker) private FReadOnly : Boolean; FDataLink: TFieldDataLink; function GetDataField: string; function GetDataSource: TDataSource; procedure SetDataField(const Value : string); procedure SetDataSource(Value: TDatasource); procedure DataChange(Sender: TObject); procedure UpdateData(Sender: TObject); procedure Change(Sender: TObject); procedure CMExit (var Message: TWMNoParams); message CM_EXIT; protected procedure KeyDown ( var Key: word; shift: TShiftState); override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property ReadOnly : Boolean read FReadOnly write FreadOnly default false; property DataField: string read GetDataField write SetDataField; property DataSource: TDataSource read GetDataSource write SetDataSource; end; procedure Register; implementation procedure Register; begin RegisterComponents('Alfra', [TALDate]); end; constructor TALDate.Create(AOwner: TComponent); begin inherited create(AOwner); FReadOnly:=false; OnChange:=Change; FDataLink:=TFieldDataLink.Create; FDataLink.OnDataChange:=DataChange; FDataLink.OnUpdateData := UpdateData; end; destructor TALDate.Destroy; begin FDataLink.OnDataChange:=nil; FDataLink.Free; inherited Destroy; end; function TALDate.GetDataField: string; begin Result:=FDataLink.fieldname; end; function TALDate.GetDataSource:TDataSource; begin Result:=FDataLink.DataSource; end; Procedure TALDate.SetDataField(const value: string); begin FDataLink.FieldName:=Value; end; procedure TALDate.SetDataSource(Value: TDataSource); begin FDataLink.DataSource:=Value; end; procedure TALDate.DataChange(Sender: TObject); begin if FDataLink.field = nil then date :=0 else { if not (FDatalink.DataSource.State in [dsInsert]) then} Date:=FDatalink.field.AsDateTime ; end; procedure TALDate.UpdateData(Sender: TObject); begin if FDataLink.CanModify then FDataLink.Field.AsDateTime:=Date; end; procedure TALDate.Change; begin FDataLink.modified; inherited; end; procedure TALDate.KeyDown(var Key: word; Shift:TshiftState); var MyKeyDown: TKeyEvent; begin if not ReadOnly and (key in [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_END, VK_HOME, VK_PRIOR, VK_NEXT]) and FDataLink.Edit then inherited KeyDown(Key,Shift) else begin MyKeyDown:=OnKeyDown; if Assigned(MyKeyDown) then MyKeyDown(Self, Key, Shift); end; end; procedure TALDate.CMExit(Var Message: TWMNoParams); begin try FdataLink.UpdateRecord; except on Exception do SetFocus; end; inherited; end; end. 我試著依照內容寫成BCB6版,還沒寫入CPP就有20個Error #ifndef ALDateH #define ALDateH //--------------------------------------------------------------------------- #include請問究竟我該怎麼改? 發表人 - taishyang 於 2004/05/11 13:15:12 |
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
#ifndef ALDateH #define ALDateH //--------------------------------------------------------------------------- #include------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D ------------------------------- 發表人 - anpino 於 2004/05/12 09:35:50 |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
myboss
一般會員 發表:25 回覆:42 積分:13 註冊:2004-01-13 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
http://delphi.ktop.com.tw/topic.php?topic_id=26857 Of course you need to check the license of your components (e.g. readme, help, etc.).
|
myboss
一般會員 發表:25 回覆:42 積分:13 註冊:2004-01-13 發送簡訊給我 |
謝謝William 兄的告知,可惜Compiles時還是有2個Error
另外想請問該去哪尋找 LIBRARIES 以及 SPARELIBS 這兩個標記 [Pascal Error] ALdate.pas(111): Incompatible types
[Pascal Fatal Error] pasall.tmp(3): Could not compile used unit 'C:\Program Files\Borland\CBuilder6\Lib\ALdate.pas' 發表人 - myboss 於 2004/05/14 12:48:38
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
lijenyun
一般會員 發表:3 回覆:19 積分:9 註冊:2003-06-22 發送簡訊給我 |
|
myboss
一般會員 發表:25 回覆:42 積分:13 註冊:2004-01-13 發送簡訊給我 |
William兄你好:
Line 111正是lijenyun兄所修正之地方,lijenyun兄果然功力高強。
procedure TALDate.Change; ->改為procedure ChangeDate(Sender: TObject);以免和父類別衝突
begin
FDataLink.modified;
inherited; ->這一行改為Change; (檢查TDateTimePicker的 Change 方法宣告為 dynamic; 而不是virtual那來的inherited)
end; 只是元件此時雖然可以Compile & Install
但卻無法使用,出現下列之錯誤訊息:
[C Error] buObt.h(56): E2303 Type name expected
[C Error] buObt.h(56): E2139 Declaration missing ;
[C Error] buObt.h(56): E2109 Not an allowed type
經檢視原始碼,Line 56: TALDate *ALDate1;
也就是說,元件可以安裝卻無法使用,請問這是怎麼回事?
|
lijenyun
一般會員 發表:3 回覆:19 積分:9 註冊:2003-06-22 發送簡訊給我 |
|
myboss
一般會員 發表:25 回覆:42 積分:13 註冊:2004-01-13 發送簡訊給我 |
|
lijenyun
一般會員 發表:3 回覆:19 積分:9 註冊:2003-06-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |