SelectDetailGLsFrm.pas 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. unit SelectDetailGLsFrm;
  2. interface
  3. uses
  4. ProjectGLDm, sdDB, mDataRecord,
  5. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  6. Dialogs, ExtCtrls, StdCtrls, sdGridDBA, ZJGrid;
  7. type
  8. TSelectDetailGLsForm = class(TForm)
  9. pnlData: TPanel;
  10. btnOk: TButton;
  11. btnCancel: TButton;
  12. leSearch: TLabeledEdit;
  13. imgSearch: TImage;
  14. zgGL: TZJGrid;
  15. saGL: TsdGridDBA;
  16. procedure zgGLGetCellText(Sender: TObject; const ACoord: TPoint;
  17. var Value: String; DisplayText: Boolean);
  18. procedure zgGLSetCellText(Sender: TObject; const ACoord: TPoint;
  19. var Value: String; DisplayText: Boolean);
  20. procedure btnOkClick(Sender: TObject);
  21. procedure imgSearchClick(Sender: TObject);
  22. private
  23. FResults: TList;
  24. function FindProjectGL(AStr: string): TProjectGLRecord;
  25. public
  26. constructor Create(AProjectGLData: TProjectGLData);
  27. destructor Destroy; override;
  28. property Results: TList read FResults;
  29. end;
  30. function SelectDetailGLs(AProjectGLData: TProjectGLData; AGLs: TList): Boolean;
  31. implementation
  32. uses
  33. UtilMethods;
  34. {$R *.dfm}
  35. function SelectDetailGLs(AProjectGLData: TProjectGLData; AGLs: TList): Boolean;
  36. var
  37. SelectForm: TSelectDetailGLsForm;
  38. begin
  39. SelectForm := TSelectDetailGLsForm.Create(AProjectGLData);
  40. try
  41. Result := SelectForm.ShowModal = mrOk;
  42. if Result then
  43. AGLs.Assign(SelectForm.Results);
  44. finally
  45. SelectForm.Free;
  46. end;
  47. end;
  48. { TAddDetailGLsForm }
  49. constructor TSelectDetailGLsForm.Create(AProjectGLData: TProjectGLData);
  50. begin
  51. inherited Create(nil);
  52. saGL.DataView := AProjectGLData.sdvProjectGL;
  53. FResults := TList.Create;
  54. ClientHeight := 495;
  55. ClientWidth := 472;
  56. end;
  57. destructor TSelectDetailGLsForm.Destroy;
  58. begin
  59. FResults.Free;
  60. inherited;
  61. end;
  62. procedure TSelectDetailGLsForm.zgGLGetCellText(Sender: TObject;
  63. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  64. var
  65. Rec: TsdDataRecord;
  66. begin
  67. if (ACoord.X = 1) and (ACoord.Y > 0) then
  68. begin
  69. Rec := saGL.DataView.Records[ACoord.Y -1];
  70. if Assigned(Rec) and (FResults.IndexOf(Rec) >= 0) then
  71. Value := 'True'
  72. else
  73. Value := 'False';
  74. end;
  75. end;
  76. procedure TSelectDetailGLsForm.zgGLSetCellText(Sender: TObject;
  77. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  78. var
  79. Rec: TsdDataRecord;
  80. begin
  81. if (ACoord.X = 1) and (ACoord.Y > 0) then
  82. begin
  83. Rec := saGL.DataView.Records[ACoord.Y -1];
  84. if Value = 'True' then
  85. FResults.Add(Rec)
  86. else if Value = 'False' then
  87. FResults.Remove(Rec);
  88. end;
  89. end;
  90. procedure TSelectDetailGLsForm.btnOkClick(Sender: TObject);
  91. begin
  92. if FResults.Count > 0 then
  93. ModalResult := mrOk
  94. else
  95. TipMessage('没有选择任何工料。');
  96. end;
  97. function TSelectDetailGLsForm.FindProjectGL(AStr: string): TProjectGLRecord;
  98. function SearchProjectGL(ABegin, AEnd: Integer): TProjectGLRecord;
  99. var
  100. iGL: Integer;
  101. Rec: TProjectGLRecord;
  102. begin
  103. Result := nil;
  104. for iGL := ABegin to AEnd do
  105. begin
  106. Rec := TProjectGLRecord(saGL.DataView.Records[iGL]);
  107. if (Pos(AStr, Rec.Code.AsString) > 0) or
  108. (Pos(AStr, Rec.Name.AsString) > 0) then
  109. begin
  110. Result := Rec;
  111. Break;
  112. end;
  113. end;
  114. end;
  115. var
  116. iCur, iGL: Integer;
  117. GLRec: TProjectGLRecord;
  118. begin
  119. Result := nil;
  120. if AStr = '' then Exit;
  121. iCur := saGL.DataView.IndexOf(saGL.DataView.Current);
  122. Result := SearchProjectGL(iCur + 1, saGL.DataView.RecordCount - 1);
  123. if not Assigned(Result) then
  124. Result := SearchProjectGL(0, iCur);
  125. end;
  126. procedure TSelectDetailGLsForm.imgSearchClick(Sender: TObject);
  127. var
  128. Rec: TProjectGLRecord;
  129. begin
  130. Rec := FindProjectGL(leSearch.Text);
  131. if Assigned(Rec) then
  132. saGL.DataView.LocateInControl(Rec)
  133. else
  134. TipMessage(Format('找不到编号、名称含有“%s”的工料。', [leSearch.Text]));
  135. end;
  136. end.