unit SelectDetailGLsFrm; interface uses ProjectGLDm, sdDB, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, sdGridDBA, ZJGrid; type TSelectDetailGLsForm = class(TForm) pnlData: TPanel; btnOk: TButton; btnCancel: TButton; leSearch: TLabeledEdit; imgSearch: TImage; zgGL: TZJGrid; saGL: TsdGridDBA; procedure zgGLGetCellText(Sender: TObject; const ACoord: TPoint; var Value: String; DisplayText: Boolean); procedure zgGLSetCellText(Sender: TObject; const ACoord: TPoint; var Value: String; DisplayText: Boolean); procedure btnOkClick(Sender: TObject); private FResults: TList; public constructor Create(AProjectGLData: TProjectGLData); destructor Destroy; override; property Results: TList read FResults; end; function SelectDetailGLs(AProjectGLData: TProjectGLData; AGLs: TList): Boolean; implementation uses UtilMethods; {$R *.dfm} function SelectDetailGLs(AProjectGLData: TProjectGLData; AGLs: TList): Boolean; var SelectForm: TSelectDetailGLsForm; begin SelectForm := TSelectDetailGLsForm.Create(AProjectGLData); try Result := SelectForm.ShowModal = mrOk; if Result then AGLs.Assign(SelectForm.Results); finally SelectForm.Free; end; end; { TAddDetailGLsForm } constructor TSelectDetailGLsForm.Create(AProjectGLData: TProjectGLData); begin inherited Create(nil); saGL.DataView := AProjectGLData.sdvProjectGL; FResults := TList.Create; end; destructor TSelectDetailGLsForm.Destroy; begin FResults.Free; inherited; end; procedure TSelectDetailGLsForm.zgGLGetCellText(Sender: TObject; const ACoord: TPoint; var Value: String; DisplayText: Boolean); var Rec: TsdDataRecord; begin if (ACoord.X = 1) and (ACoord.Y > 0) then begin Rec := saGL.DataView.Records[ACoord.Y -1]; if Assigned(Rec) and (FResults.IndexOf(Rec) >= 0) then Value := 'True' else Value := 'False'; end; end; procedure TSelectDetailGLsForm.zgGLSetCellText(Sender: TObject; const ACoord: TPoint; var Value: String; DisplayText: Boolean); var Rec: TsdDataRecord; begin if (ACoord.X = 1) and (ACoord.Y > 0) then begin Rec := saGL.DataView.Records[ACoord.Y -1]; if Value = 'True' then FResults.Add(Rec) else if Value = 'False' then FResults.Remove(Rec); end; end; procedure TSelectDetailGLsForm.btnOkClick(Sender: TObject); begin if FResults.Count > 0 then ModalResult := mrOk else TipMessage('没有选择任何工料。'); end; end.