ModalResult 값을 코딩에서 주려면 Close호출후에 ModalResult값을 줘야합니다.
procedure TFrmItemSearch.BitOkClick(Sender: TObject);
Var I,K : Integer ;
begin
FOR I := 0 TO dmModule.QItemMast.FieldCount -1 DO
mMItFd[I] := dmModule.QItemMast.Fields.Fields[I].AsString ;
dmModule.QItemMast.Close ;
K := ModalResult ;
// sHOWMESSAGE(INTTOSTR(K) + ' 번') ;
Close ;
ModalResult:= mrOk ; //요렇게 순서만 바꾸면 됩니다.
end;
요것 별것 아닌데
어디에 자세히 설명해놓은곳도 없고 헷갈리는 요소인것 같네요
왜그러가하면?
TCustomForm의 Close함수에 나와 있습니다.
아래 코드를 보시면
Form.Close함수에서 Modal폼일경우 ModalResult값을 default로 항상 mrCancel로 설정해버립니다.
procedure TCustomForm.Close;
var
CloseAction: TCloseAction;
begin
//Modal폼이면 Close함수에서 ModalResult값을 default로 항상 mrCancel로 설정함
if fsModal in FFormState then
ModalResult := mrCancel
else
if CloseQuery then
begin
if FormStyle = fsMDIChild then
if biMinimize in BorderIcons then
CloseAction := caMinimize else
CloseAction := caNone
else
CloseAction := caHide;
DoClose(CloseAction);
if CloseAction <> caNone then
if Application.MainForm = Self then Application.Terminate
else if CloseAction = caHide then Hide
else if CloseAction = caMinimize then WindowState := wsMinimized
else Release;
end;
end;
그러니 ModalResult값을 설정후에 Close호출하면
항상 ModalResult값이 mrCancel이 되는것입니다.
그럼..
장재영 님이 쓰신 글 :
: ModalResult 리턴에 대해서
: 품목 명칭 찿는 데요 없으면 조회 화면을 띄워서 선택후
: A FORM 유닛에서 품목 명칭 찿는 데요 없으면 B FORM 조회 화면을 띄워서 선택후 이때 ModalResult := mrOk 해줌 결과값 1임.
: A FORM 결과 FORM ModalResult 항상 2임.
:
: 어디가 잘못되었나요?
:
: A UNIT (TfrmDrwMastI) 에서
:
: unit UDrwMastI;
:
: interface
:
: uses
: Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
: StdInsMDForm, Db, DBTables, DBCtrls, StdCtrls, Buttons, ExtCtrls, Mask,
: CMEdit, CMDBCombo, CMDBLookupCombo, CMDBEdit, CMGrids, CMDBGrids, Grids,
: DBGrids;
:
: type
: TfrmDrwMastI = class(TStdlnsMDForm)
: LblSuju: TLabel;
: EdSCode: TCMEdit;
: EdECode: TCMEdit;
: Label2: TLabel;
: Label3: TLabel;
: Label4: TLabel;
: Label14: TLabel;
: Label15: TLabel;
: Label16: TLabel;
: EdDrwName: TCMDBEdit;
: EdDrwNo: TCMDBEdit;
: EdCust: TCMDBEdit;
: EdItem: TCMDBEdit;
: EdDesign: TCMDBEdit;
: EdHKey2: TCMEdit;
: ComboCust: TCMDBLookupComboBox;
: ComboItem: TCMDBLookupComboBox;
: EdHKey1: TCMEdit;
: Label5: TLabel;
: EdTKey1: TCMEdit;
: Label19: TLabel;
: Label20: TLabel;
: Label22: TLabel;
: Label27: TLabel;
: EdCnt: TCMDBEdit;
: EdTDesign: TCMDBEdit;
: EdfUnit: TCMDBEdit;
: EdBigo: TCMDBEdit;
: ComboItmCode: TCMDBLookupComboBox;
: CMDBGrid: TCMDBGrid;
: QItmHMast: TQuery;
: DSItmHMast: TDataSource;
: QItmTMast: TQuery;
: DSItmTMast: TDataSource;
: QCstMastH: TQuery;
: DSCstMastH: TDataSource;
: QryDel: TQuery;
: QSujuMast: TQuery;
: Label25: TLabel;
: EdTotCnt: TCMDBEdit;
: BomCopy: TBitBtn;
: QBomMast: TQuery;
: Query1: TQuery;
: Label26: TLabel;
: EdKiBonCnt: TCMDBEdit;
: Label10: TLabel;
: EdMEGbn: TCMDBEdit;
: ComboMEGbn: TCMDBComboBox;
: QryTSum: TQuery;
: qryDetailSujuSeq: TIntegerField;
: qryDetailSeqCnt: TIntegerField;
: qryDetailItem: TStringField;
: qryDetailDesign: TStringField;
: qryDetailIOUnit: TStringField;
: qryDetailKiBonCnt: TFloatField;
: qryDetailCnt: TFloatField;
: qryDetailPrice: TFloatField;
: qryDetailTaxAmt: TFloatField;
: qryDetailVatAmt: TFloatField;
: qryDetailMaker: TStringField;
: qryDetailBigo: TStringField;
: qryDetailWight: TFloatField;
: qryDetailSizeX: TFloatField;
: qryDetailSizeY: TFloatField;
: qryDetailSizeH: TFloatField;
: qryDetailMEGbn: TStringField;
: qryDetailSujuCode: TStringField;
: qryDetailFileGbn: TStringField;
: qryDetailSujung: TIntegerField;
: Label1: TLabel;
: EdCstT: TCMDBEdit;
: ComboCstT: TCMDBLookupComboBox;
: QCstMastT: TQuery;
: DSCstMastT: TDataSource;
: EdItName: TDBEdit;
: Label6: TLabel;
: procedure EdHKey1Exit(Sender: TObject);
: procedure FormCreate(Sender: TObject);
: procedure FormDestroy(Sender: TObject);
: procedure bitBtnQueryClick(Sender: TObject);
: procedure EdHKey2KeyPress(Sender: TObject; var Key: Char);
: procedure EdTKey1KeyPress(Sender: TObject; var Key: Char);
: procedure EdTKey1Click(Sender: TObject);
: procedure bitBtnPostClick(Sender: TObject);
: procedure dSrcMasterDataChange(Sender: TObject; Field: TField);
: procedure dSrcDetailDataChange(Sender: TObject; Field: TField);
: procedure BomCopyClick(Sender: TObject);
: procedure EdPriceExit(Sender: TObject);
: procedure EdKiBonCntExit(Sender: TObject);
: procedure EdTotCntExit(Sender: TObject);
: procedure EdTDesignExit(Sender: TObject);
: procedure EdMEGbnExit(Sender: TObject);
: procedure ComboMEGbnClick(Sender: TObject);
: procedure ComboItmCodeClick(Sender: TObject);
: procedure EdBigoExit(Sender: TObject);
: procedure EdTDesignKeyPress(Sender: TObject; var Key: Char);
: private
: { Private declarations }
: procedure HdTailSum1(pCode :String; pSeq : Integer) ;
: Procedure ItemStore() ;
:
: public
: { Public declarations }
: end;
:
: var
: frmDrwMastI: TfrmDrwMastI;
: mSuju,mMEGbn : String ;
: mSeq,mIOGbn : Integer ;
: mNKey : ARRAY[0..1] OF Integer ;
: mAmt : Double ;
: FocusLook: TWinControl;
:
: implementation
: Uses Dm,MsgConst,FuncS,UItemSearch ;
:
: {$R *.DFM}
:
: procedure TfrmDrwMastI.EdTDesignKeyPress(Sender: TObject; var Key: Char); 명칭이 없음 조회화면 띄워주고 DB에 넣어줌.
: begin
: inherited;
: If Key = #13 then Begin
: // FrmItemSearch := TFrmItemSearch.Create(Salf);
: mMItFd[2] := EdTDesign.Text ;
: // mItRigh := QItemSearch(mMItFd[2])
: if mMItFd[2] <> QItmTMast.FieldByName('Design').AsString THEN Begin <-- 명칭이 같은게 없으면
: FrmItemSearch := TFrmItemSearch.Create(SELF); <--
: FrmItemSearch.ShowModal;
: // FrmItemSearch.Show;
:
: end ;
: if FrmItemSearch.ModalResult = mrOK then <--- 여기가 문제임.(FrmItemSearch.ModalResult = 2, mrOK = 1 임
: qryDetail.FieldByName('Item').AsString := mMItFd[0] ;
:
:
: end ;
: end;
:
: //------
:
: B FORM (TFrmItemSearch) 임
: 여기서 A FROM 선언 안해주었음.
:
:
: procedure TFrmItemSearch.BitOkClick(Sender: TObject);
: Var I,K : Integer ;
: begin
: FOR I := 0 TO dmModule.QItemMast.FieldCount -1 DO
: mMItFd[I] := dmModule.QItemMast.Fields.Fields[I].AsString ;
:
: dmModule.QItemMast.Close ;
: K := ModalResult ;
: // sHOWMESSAGE(INTTOSTR(K) + ' 번') ;
: ModalResult:= mrOk ; 여기가 제되대됨.(FrmItemSearch.ModalResult = 2, mrOK = 1 임
: Close ;
: end;