| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | unit SelectDetailGLsFrm;interfaceuses  ProjectGLDm, sdDB, mDataRecord,  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);    procedure imgSearchClick(Sender: TObject);  private    FResults: TList;    function FindProjectGL(AStr: string): TProjectGLRecord;  public    constructor Create(AProjectGLData: TProjectGLData);    destructor Destroy; override;    property Results: TList read FResults;  end;function SelectDetailGLs(AProjectGLData: TProjectGLData; AGLs: TList): Boolean;implementationuses  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;  ClientHeight := 495;  ClientWidth := 472;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;function TSelectDetailGLsForm.FindProjectGL(AStr: string): TProjectGLRecord;  function SearchProjectGL(ABegin, AEnd: Integer): TProjectGLRecord;  var    iGL: Integer;    Rec: TProjectGLRecord;  begin    Result := nil;    for iGL := ABegin to AEnd do    begin      Rec := TProjectGLRecord(saGL.DataView.Records[iGL]);      if (Pos(AStr, Rec.Code.AsString) > 0) or          (Pos(AStr, Rec.Name.AsString) > 0) then      begin        Result := Rec;        Break;      end;    end;  end;var  iCur, iGL: Integer;  GLRec: TProjectGLRecord;begin  Result := nil;  if AStr = '' then Exit;  iCur := saGL.DataView.IndexOf(saGL.DataView.Current);  Result := SearchProjectGL(iCur + 1, saGL.DataView.RecordCount - 1);  if not Assigned(Result) then    Result := SearchProjectGL(0, iCur);end;procedure TSelectDetailGLsForm.imgSearchClick(Sender: TObject);var  Rec: TProjectGLRecord;begin  Rec := FindProjectGL(leSearch.Text);  if Assigned(Rec) then    saGL.DataView.LocateInControl(Rec)  else    TipMessage(Format('找不到编号、名称含有“%s”的工料。', [leSearch.Text]));end;end.
 |