Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Interface


Страницы:   1 2

андр ©   (2007-12-19 14:43:00) 

Можно ли както обращатся к с труктуре типа:

TType = (tString, tInteger, tBoolean)

через интерфейсы, если можно, то как объявить такой тип ???


андр   (2007-12-19 15:00:00) [21]


unit uDialog;

interface

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

const
 SET_ = [ #8, #13];
 SET_NUMBER = ['0'..'9'];
 SET_LOWER_RUS_CHAR = ['à'..'ÿ'];
 SET_UPPER_RUS_CHAR = ['À'..'ß'];
 SET_LOWER_ENG_CHAR = ['a'..'z'];
 SET_UPPER_ENG_CHAR = ['A'..'Z'];

type
{ TShowDialog }

 TShowDialog = (sdCard, sdCalculation, sdNewCard, sdOther);

{ TDialog }

 TDialog = packed record
   ShowType: TShowDialog;
 end;
 
{ TfDialog }

 TfDialog = class(TForm)
   sBtnOk: TSpeedButton;
   sBtnCancel: TSpeedButton;
   grpBx: TGroupBox;
   pnl: TPanel;
   edt: TEdit;
   chkBxAutoOpen: TCheckBox;
   chkBxAutoNew: TCheckBox;
   procedure FormCreate(Sender: TObject);
   procedure FormShow(Sender: TObject);
   procedure FormActivate(Sender: TObject);
   procedure FormDeactivate(Sender: TObject);
   procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure FormDestroy(Sender: TObject);
   procedure sBtnOkClick(Sender: TObject);
   procedure sBtnCancelClick(Sender: TObject);
   procedure edtChange(Sender: TObject);
   procedure edtKeyPress(Sender: TObject; var Key: Char);
   procedure chkBxAutoOpenClick(Sender: TObject);
   procedure chkBxAutoNewClick(Sender: TObject);
 private
   { Private declarations }
   FMaxLen: Integer;
   FText: String;
   FCheck: Boolean;
 public
   { Public declarations }
   constructor Create(AOwner: TComponent; Rec: TDialog); overload;
 end;

function CreateDialog(AOwner: TComponent; Rec: TDialog): Boolean;

resourcestring
 rsCaptionCard = 'ÄÈÀËÎà ÊÀÐÒÎ×ÊÀ ÀÁÎÍÅÍÒÀ';
 rsGrpBxCaptionCard = 'ÂÂÅÄÈÒÅ ËÈÖÅÂÎÉ Ñ×ÅÒ:';
 rsChkBxAutoOpenCaption = 'ÎÒÊÐÛÂÀÒÜ ÀÂÒÎÌÀÒÈ×ÅÑÊÈ';
 rsChkBxAutoNewCaption = 'ÑÎÇÄÀÂÀÒÜ ÀÂÒÎÌÀÒÈ×ÅÑÊÈ';

var
 fDialog: TfDialog;

 RecDialog: TDialog;

implementation

uses
 uDm, uCard;

{$R *.dfm}

function CreateDialog(AOwner: TComponent; Rec: TDialog): Boolean;
begin
 Result := True;
 try
   if not Assigned(fDialog) then
     fDialog := TfDialog.Create(AOwner, Rec);
 except
   Result := False;
 end;
end;

{ TfDialog }

constructor TfDialog.Create(AOwner: TComponent; Rec: TDialog);
begin
 inherited Create(AOwner);
 RecDialog := Rec;
 case RecDialog.ShowType of
   sdCard:
     begin
       Caption := rsCaptionCard;
       grpBx.Caption := rsGrpBxCaptionCard;
       FMaxLen := 7;
       chkBxAutoNew.Visible := True;
     end;
 end;
 edt.MaxLength := FMaxLen;
 chkBxAutoOpen.Caption := rsChkBxAutoOpenCaption;
 chkBxAutoNew.Caption := rsChkBxAutoNewCaption;
 ShowModal;
end;

procedure TfDialog.FormCreate(Sender: TObject);
begin
 //
end;

procedure TfDialog.FormShow(Sender: TObject);
begin
 //
end;

procedure TfDialog.FormActivate(Sender: TObject);
begin
 //
end;

procedure TfDialog.FormDeactivate(Sender: TObject);
begin
 //
end;

procedure TfDialog.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 //
end;

procedure TfDialog.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree;
end;

procedure TfDialog.FormDestroy(Sender: TObject);
begin
 fDialog := nil;
end;

procedure TfDialog.sBtnOkClick(Sender: TObject);
var
 RecCard: TCard;
begin
 if Length(Trim(FText)) 0 then
   if not FCheck then
     Exit;
 case RecDialog.ShowType of
   sdCard:
     begin
       RecCard.Face := FText;
       if Length(Trim(RecCard.Face)) 0 then
         RecCard.ShowType := scCard
       else
         RecCard.ShowType := scNewCard;

       if CreateCard(Application, RecCard) then
         begin
           Close;
         end;
     end;
 end;
end;

procedure TfDialog.sBtnCancelClick(Sender: TObject);
begin
 Close;
end;

procedure TfDialog.edtChange(Sender: TObject);
begin
 FText := edt.Text;
 FCheck := (Length(Trim(FText)) >= FMaxLen);
 if FCheck then
   begin
     edt.Color := clWindow;
     if dm.FaceExists(FText) = 1 then
       begin
         if chkBxAutoOpen.Checked then
           begin
             sBtnOkClick(Sender);
           end;
       end
     else
       begin
         edt.Color := clRed;
         if chkBxAutoNew.Checked then
           begin
             //sBtnOkClick(Sender);
           end;
       end;
   end
 else
   begin
     edt.Color := clYellow;
   end;
end;

procedure TfDialog.edtKeyPress(Sender: TObject; var Key: Char);
begin
 case RecDialog.ShowType of
   sdCard:
     begin
       if not (Key in SET_NUMBER + SET_) then
         Key := #0;
     end;
 end;
end;

procedure TfDialog.chkBxAutoOpenClick(Sender: TObject);
begin
 //
end;

procedure TfDialog.chkBxAutoNewClick(Sender: TObject);
begin
 //
end;

end.



...
procedure TfMain.mmProgramCardClick(Sender: TObject);
var
 Rec: TDialog;
begin
 Rec.ShowType := sdCard;

 if CreateDialog(Application, Rec) then
   begin
     //
   end;
end;
...


Окцентирую это:
 TShowDialog = (sdCard, sdCalculation, sdNewCard, sdOther);

Хочу просто плагин вызывать....


Kolan   (2007-12-19 14:54:00) [22]

> Да плагин пишу, есть в dll форма, если ей передать например
> tStringб то она один тап выполнять будет, если tInteger
> то другой, неохото писать в программе и в плагине одно и
> тоже…

Покажи код(только сократи), тут можно оч. удобно заюзать паттерн Visitor но без кода объяснить не смогу, кроме того без когда я могу ошибаться…


oldman   (2007-12-19 14:52:00) [23]


> андр   (19.12.07 14:50) [4]


А не проще передать два параметра?
Первый - че делать, второй - с чем делать?


андр   (2007-12-19 14:51:00) [24]

Илиже есть смысл создать SharedTypes ???


андр   (2007-12-19 14:50:00) [25]


> Kolan ©   (19.12.07 14:47) [3]


Да плагин пишу, есть в dll форма, если ей передать например tStringб то она один тап выполнять будет, если tInteger то другой, неохото писать в программе и в плагине одно и тоже.....


Kolan   (2007-12-19 14:47:00) [26]

> Можно ли както обращатся к с труктуре типа:

А как ты хочешь обрашаться по индексу?

TType = (tString, tInteger, tBoolean)

IGetType = interface
 function GetType(Index: Intger): TType;
end;


TTypeObject = class(TInterfacedObject, IGetType)
 function GetType(Index: Intger): TType;
end;


function TTypeObject.GetType(Index: Intger): TType;
begin
 case Index of
   0: Result := tString;
   1: Result := tInteger;
   2: Result := tBoolean;
 end;
end;


Нафих такое надо — не представляю…


oldman   (2007-12-19 14:46:00) [27]

или класс


oldman   (2007-12-19 14:45:00) [28]


> то как объявить такой тип


Как record


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо