![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Interface
андр © (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