2016-12-07 10 views
0

私は現在、Delphi7のBlackJackアプリケーションで作業しており、後でカードの値を表示するためにエディットボックスのテキストを中央に配置しようとしています。私はこの文書(http://delphidabbler.com/tips/85)を見つけましたが、今は正しく実装することができません。私はリンクからのコードを "Unit2"に入れ、 "Unit1"の編集ボックスで両方の関数を呼び出してテキストを整列しようとしています。両方の関数のどちらかを呼び出そうとすると、渡されたパラメータは同じではないことがわかります。 もしあなたが私を助けることができるなら、それは非常に高く評価されるでしょう。ここでDelphi7でエディットボックスのテキストを中央に揃える方法は?

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls,Unit2; 

type 
    TForm1 = class(TForm) 
    Edit1: TEdit; 
    Button10: TButton; 
    Button4: TButton; 
    Edit2: TEdit; 
    Edit3: TEdit; 

[...] 

Unit2ののコード:

unit Unit2; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls; 

type 
    TMyEdit = Class(TEdit) 
    public 
    FAlignment: TAlignment; 
    procedure SetAlignment(Value: TAlignment); 
    procedure CreateParams(var Params: TCreateParams); override; 
    property Alignment: TAlignment read FAlignment write SetAlignment; 
    end; 

implementation 

procedure TMyEdit.CreateParams(var Params: TCreateParams); 
begin 
    inherited CreateParams(Params); 
    case Alignment of 
    taLeftJustify: 
     Params.Style := Params.Style or ES_LEFT and not ES_MULTILINE; 
    taRightJustify: 
     Params.Style := Params.Style or ES_RIGHT and not ES_MULTILINE; 
    taCenter: 
     Params.Style := Params.Style or ES_CENTER and not ES_MULTILINE; 
    end; 
end; 

procedure TMyEdit.SetAlignment(Value: TAlignment); 
begin 
    if FAlignment <> Value then 
    begin 
    FAlignment := Value; 
    RecreateWnd; 
    end; 
end; 
end. 
+0

我々は本当にボタン宣言の叙事詩リストを表示する必要はありません。私たちが望むのは、エラーの原因となるコード行とそのエラーを特定することです。エラーの内容を説明しないでください。それをそのまま引用してください。あなたの虚偽のタグを削除しました。これはターボパスカルではありません。 –

+0

@ David Heffernanたとえば、編集4でUnit2の機能をどのように呼び出すことさえも考えていないので、今は失敗する部分はありません。私が試してみると、どちらかというと:宣言されていない識別子か、または同じパラメータではない。私の質問では、私はその機能を一般的にどのように使うかを求めていました。タグのご協力ありがとうございました! – Nikolas

+2

'Unit2'の機能は何ですか?それはあなたが使用するように見えないクラスを公開します。おそらくあなたが探しているのはインターポーザークラスです。コンポーネントを登録しないのはなぜですか? –

答えて

1

あなたは実際に全くTMyEditクラスを使用していない。ここ

はUnit1はのdeclerationです。そのため、Unit1は、Unit2の機能を使用できません。 Unit1はまだ標準TEditを使用しています。 TMyEditを登録して、IDEにそのパッケージをインストールし、独自のパッケージに

  1. 移動Unit2

    次の2つの選択肢があります。 TMyEditはデザイン時に使用でき、のコントロールをTMyEditのコントロールに置き換えることができます。

  2. あなたはそのルートを行くにしたくない場合は、代替がTEditTMyEditを再宣言し、そのままでUnit1を残すことです。 uses句で宣言された最後のTEditの型を使用します。これは、例えば、「インターポーザクラス」として知られている:

    unit Unit2; 
    
    interface 
    
    uses 
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
        Dialogs, StdCtrls; 
    
    type 
        TEdit = Class(StdCtrls.TEdit) 
        public 
        FAlignment: TAlignment; 
        procedure SetAlignment(Value: TAlignment); 
        procedure CreateParams(var Params: TCreateParams); override; 
        property Alignment: TAlignment read FAlignment write SetAlignment; 
        end; 
    
    implementation 
    
    procedure TEdit.CreateParams(var Params: TCreateParams); 
    begin 
        inherited CreateParams(Params); 
        case Alignment of 
        taLeftJustify: 
         Params.Style := Params.Style or ES_LEFT and not ES_MULTILINE; 
        taRightJustify: 
         Params.Style := Params.Style or ES_RIGHT and not ES_MULTILINE; 
        taCenter: 
         Params.Style := Params.Style or ES_CENTER and not ES_MULTILINE; 
        end; 
    end; 
    
    procedure TEdit.SetAlignment(Value: TAlignment); 
    begin 
        if FAlignment <> Value then 
        begin 
        FAlignment := Value; 
        RecreateWnd; 
        end; 
    end; 
    
    end. 
    
+1

またはインターポーザ・クラス: 'TEdit = Class(Unit2.TMyEdit);を使用するか、実行時に' TMyEdit'を動的に作成してください。 – kobik

+0

それは私が探していた答えだった、ありがとうトン。 – Nikolas

関連する問題