Текущий архив: 2007.12.02;
Скачать: CL | DM;
Вниз
Как правильно делать диалоги? Найти похожие ветки
← →
Kolan © (2007-11-06 10:41) [0]Здравстввуйте,
Допустип мне надо сделать диалог с 2 Editfvb, 2 Combo, и 1 CheckBox… как его оформить?
Вот я поступаю так:
TDefectDialogForm = class(TForm)
Bevel1: TBevel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label1: TLabel;
DefectNameEdit: TEdit;
BlockLabel: TLabel;
BlockComboBox: TComboBox;
Label2: TLabel;
GroupComboBox: TComboBox;
Label3: TLabel;
FactorEdit: TEdit;
DeprecatedDefectCheckBox: TCheckBox;
private
{ Private declarations }
FLoadGroupsEvent: TLoadGroupsEvent;
procedure DoLoadGroupsEvent(
BlockName: string; BlockIndex: Integer; GroupList: TStrings);
public
{ Public declarations }
property OnLoadGroups: TLoadGroupsEvent read
FLoadGroupsEvent write FLoadGroupsEvent;
end;
TDefectDialog = class
private
FDefectDialogForm: TDefectDialogForm;
function GetDefectName: string;
procedure SetDefectName(const Value: string);
function GetBlocks: TStrings;
procedure SetBlocks(const Value: TStrings);
function GetGroups: TStrings;
procedure SetGroups(const Value: TStrings);
function GetFactor: Double;
procedure SetFactor(const Value: Double);
function GetIsDeprecated: Boolean;
procedure SetIsDeprecated(const Value: Boolean);
function GetBlockIndex: Integer;
procedure SetBlockIndex(const Value: Integer);
function GetGroupIndex: Integer;
procedure SetGroupIndex(const Value: Integer);
function GetLoadGroupsEvent: TLoadGroupsEvent;
procedure SetLoadGroupsEvent(const Value: TLoadGroupsEvent);
public
function Execute: Boolean;
constructor Create;
destructor Destroy; override;
property DefectName: string read GetDefectName write SetDefectName;
property Blocks: TStrings read GetBlocks write SetBlocks;
property Groups: TStrings read GetGroups write SetGroups;
property Factor: Double read GetFactor write SetFactor;
property IsDeprecated: Boolean read GetIsDeprecated write SetIsDeprecated;
property BlockIndex: Integer read GetBlockIndex write SetBlockIndex;
property GroupIndex: Integer read GetGroupIndex write SetGroupIndex;
property OnLoadGroups: TLoadGroupsEvent read
GetLoadGroupsEvent write SetLoadGroupsEvent;
end;
Методы:procedure TDefectDialog.SetDefectName(const Value: string);
begin
if FDefectDialogForm.DefectNameEdit.Text <> Value then
FDefectDialogForm.DefectNameEdit.Text := Value;
end;function TDefectDialog.GetDefectName: string;
begin
Result := FDefectDialogForm.DefectNameEdit.Text;
end;
И Соотв пользую так:
beginDefectDialog := TDefectDialog.Create;
try
<Устанавливаю свойства>
if DefectDialog.Execute then
begin
<…>
end;
finally
DefectDialog.Free;
end;
А как надо?
← →
clickmaker © (2007-11-06 10:44) [1]а почему сомнения, что не так что-то делаешь?
← →
Kolan © (2007-11-06 10:47) [2]> а почему сомнения, что не так что-то делаешь?
Причина раз — тут попахивате feature envy.
Причина два — Форму видно в модуле, как бы её спрятать?
← →
clickmaker © (2007-11-06 11:06) [3]а зачем разбивать диалог на 2 класса - визуальный и не- ?
В VCL для стандартных типа opendialog так сделано, потому что это оболочки для виндозных функций-диалогов, но здесь форма-то - твоя целиком. Тебе и карты в руки
← →
Kolan © (2007-11-06 11:08) [4]> Тебе и карты в руки
То есть как лучьше делать?
Где создавать экземпляр?
← →
clickmaker © (2007-11-06 11:13) [5]
> Где создавать экземпляр?
ну, популярностью пользуются два варианта
var Dlg: TDefectDialogForm;
Dlg := TDefectDialogForm.Create(Application);
with Dlg do begin
try
// Устанавливаем свойства
Res := ShowModal;
// Получаем что-то от диалога
finally
Free;
end;
end;
либо
Res := TDefectDialogForm.Execute(<input params>, <output params>);
где Execute - class function
Адепты "чистого" ООП ко второму варианту относятся скептически, дабы он несколько сдвигает концепцию к процедурно-ориентированной, а по науке надо все через свойства передавать. Но тем не менее, иногда очень удобно, особенно, если вызывается во многих местах
← →
Kolan © (2007-11-06 11:29) [6]> Тебе и карты в руки
То есть как лучьше делать?
Где создавать экземпляр?
> Res := TDefectDialogForm.Execute(<input params>, <output
> params>);
Тут еще не покатип при большом списке параметров. Будет «Long Parameter List».
Первыйвариант мне ненравится тем, что клиент манипулирует формой.
> ну, популярностью пользуются два варианта
К сожалению оба эти варианта мне изветсны. Я думал мож есть еще что-то.
← →
clickmaker © (2007-11-06 11:32) [7]
> Тут еще не покатип при большом списке параметров. Будет
> «Long Parameter List».
их можно упаковать в record. Причем, и те и другие
← →
Kolan © (2007-11-06 11:39) [8]> их можно упаковать в record. Причем, и те и другие
Ну ясно. Вообщем ответ я получил. Благодарю.
Страницы: 1 вся ветка
Текущий архив: 2007.12.02;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.016 c