2016-12-07 5 views
0

В настоящее время я работаю над приложением BlackJack в Delphi7, и я пытаюсь центрировать текст окна редактирования, чтобы позже показать значение карты. Я нашел эту документацию (http://delphidabbler.com/tips/85), и теперь я не могу ее правильно реализовать. Я поместил код из ссылки в «Unit2», и теперь я пытаюсь вызвать обе функции в своих блоках редактирования из «Unit1», чтобы выровнять их текст. Всякий раз, когда я пытаюсь вызвать одну из двух функций, он говорит мне, что прошедшие параметры не идентичны. Если вы, ребята, смогли бы мне помочь, это было бы очень признательно.Как центрировать текст окна редактирования в Delphi7?

Вот decleration из группы1:

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

@ Дэвид Хеффернан в данный момент не участвует, так как я даже не знаю, как даже вызывать функции Unit2 на Edit4, например. Когда я попробую, он либо говорит: Необъявленный идентификатор, либо не идентичные параметры. С моим вопросом я искал помощи, как использовать эту функцию в целом. Спасибо за помощь с тегами! – Nikolas

+2

Какие функции 'Unit2'? Он предоставляет класс, который вы не видите. Возможно, то, что вы ищете, - это класс-посредник. Или почему бы не зарегистрировать компонент? –

ответ

1

Вы на самом деле не используя TMyEdit класс вообще. Вот почему Unit1 не может использовать функциональные возможности Unit2. Unit1 по-прежнему использует стандарт TEdit.

У вас есть два варианта:

  1. Перемещение Unit2 в отдельный пакет, который регистрирует TMyEdit, а затем установить этот пакет в IDE. TMyEdit будет доступен во время разработки, и вы можете заменить элементы управления TEdit на элементы управления TMyEdit.

  2. Если вы не хотите идти по этому пути, то альтернативой является переобъявить TMyEdit в TEdit и оставить Unit1 как есть. Он будет использовать последний тип TEdit, объявленный в предложении uses. Это известно как «Interposer класс», например:

    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