home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 September / Chip_2002-09_cd1.bin / zkuste / delphi / kompon / d3456 / SQLSET.ZIP / SQLSEDIT.PAS < prev    next >
Pascal/Delphi Source File  |  2002-01-27  |  6KB  |  232 lines

  1. {$D+,L+,Y+}
  2.  
  3. unit SQLsEdit;
  4.  
  5. interface
  6.  
  7. uses
  8.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  9.   StdCtrls, Buttons, SQLSet, ComCtrls, ExtCtrls;
  10.  
  11. type
  12.   TSQLsEditor = class(TForm)
  13.     GroupBox1: TGroupBox;
  14.     bnNew: TButton;
  15.     bnDelete: TButton;
  16.     Panel1: TPanel;
  17.     BitBtn1: TBitBtn;
  18.     BitBtn2: TBitBtn;
  19.     GroupBox2: TGroupBox;
  20.     mSQL: TMemo;
  21.     lbSQLItems: TListBox;
  22.     Label1: TLabel;
  23.     edTitle: TEdit;
  24.     procedure bnNewClick(Sender: TObject);
  25.     procedure FormDestroy(Sender: TObject);
  26.     procedure bnDeleteClick(Sender: TObject);
  27.     procedure lbSQLItemsClick(Sender: TObject);
  28.     procedure edTitleExit(Sender: TObject);
  29.     procedure edTitleChange(Sender: TObject);
  30.     procedure mSQLExit(Sender: TObject);
  31.     procedure mSQLChange(Sender: TObject);
  32.   private
  33.     FSQLSet: TSQLSet;
  34.     SQLItems: TSQLItems;
  35.     TitleChanged, SQLTextChanged: boolean;
  36.     procedure RefreshItems;
  37.     procedure UpdateScreen(value: TSQLItem);
  38.     procedure ClearScreen;
  39.     procedure ShowSelectMsg;
  40.     procedure SelectItem(value: Integer);
  41.   public
  42.     procedure SetValues(SQLSet: TSQLSet);
  43.     function GetValues(SQLSet: TSQLSet): Boolean;
  44.   end;
  45.  
  46.   function EditSQLItems(SQLSet: TSQLSet): Boolean;
  47.  
  48. implementation
  49.  
  50. {$R *.DFM}
  51.  
  52. function EditSQLItems(SQLSet: TSQLSet): Boolean;
  53. var
  54.   SQLsEditor: TSQLsEditor;
  55. begin
  56.   Result:=False;
  57.   SQLsEditor := TSQLsEditor.Create(Application);
  58.   try
  59.     SQLsEditor.SetValues(SQLSet);
  60.     If SQLsEditor.ShowModal = mrOK then
  61.       begin
  62.         SQLsEditor.GetValues(SQLSet);
  63.         Result:=true;
  64.       end;
  65.   finally
  66.     SQLsEditor.Destroy;
  67.   end;
  68. end;
  69.  
  70. procedure TSQLsEditor.SelectItem(value: Integer);
  71. var
  72.   i: Integer;
  73. begin
  74.   for i := 0 to lbSQLItems.Items.Count -1 do lbSQLItems.Selected[i] := false;
  75.   try
  76.     lbSQLItems.ItemIndex := value;
  77.     lbSQLItems.Selected[value]:= true;
  78.   except
  79.     If lbSQLItems.Items.Count > 0 then lbSQLItems.ItemIndex := 0;
  80.   end;
  81. end;
  82.  
  83. procedure TSQLsEditor.ShowSelectMsg;
  84. begin
  85.   MessageDlg('You have to select a SQLItem',mtError, [mbOK],0);
  86.   lbSQLItems.SetFocus;
  87. end;
  88.  
  89. procedure TSQLsEditor.RefreshItems;
  90. var
  91.   i: Integer;
  92. begin
  93.   lbSQLItems.Items.Clear;
  94.   with SQLItems do for i := 0 to Count - 1 do
  95.     lbSQLItems.Items.Add('Item_' + IntToStr(i) + ': ' + Items[i].Title);
  96. end;
  97.  
  98. procedure TSQLsEditor.SetValues(SQLSet: TSQLSet);
  99. begin
  100.   FSQLSet := SQLSet;
  101.   SQLItems := TSQLItems.Create(FSQLSet);
  102.   SQLItems.Assign(FSQLSet.SQLItems);
  103.   if SQLItems.Count > 0 then begin
  104.     RefreshItems;
  105.     SelectItem(0);
  106.     UpdateScreen(SQLItems.Items[lbSQLItems.ItemIndex]);
  107.   end;
  108.   TitleChanged:=false;
  109.   SQLTextChanged:=false;
  110. end;
  111.  
  112. function TSQLsEditor.GetValues(SQLSet: TSQLSet): Boolean;
  113. begin
  114.   SQLSet.SQLItems.Clear;
  115.   SQLSet.SQLItems.Assign(SQLItems);
  116.   GetValues := True;
  117. end;
  118.  
  119. procedure TSQLsEditor.UpdateScreen(value: TSQLItem);
  120. begin
  121.   edTitle.Text := Value.Title;
  122.   mSQL.Text := Value.SQLText;
  123. end;
  124.  
  125. procedure TSQLsEditor.ClearScreen;
  126. begin
  127.   edTitle.Text := '';
  128.   mSQL.Clear;
  129. end;
  130.  
  131. procedure TSQLsEditor.FormDestroy(Sender: TObject);
  132. begin
  133.   SQLItems.Free;
  134. end;
  135.  
  136. procedure TSQLsEditor.bnNewClick(Sender: TObject);
  137. var
  138.   i: Integer;
  139.   VC: TSQLItem;
  140. begin
  141.   i := lbSQLItems.Items.Count;
  142.   lbSQLItems.Items.Add('Item_' + IntToStr(i) + ':');
  143.   SelectItem(i);
  144.   VC := SQLItems.Add;
  145.   VC.Title := '';
  146.   VC.SQLText := '';
  147.   UpdateScreen(VC);
  148. end;
  149.  
  150. procedure TSQLsEditor.bnDeleteClick(Sender: TObject);
  151. var
  152.   OldSQLItems: TSQLItems;
  153.   i, i1: Integer;
  154. begin
  155.   If lbSQLItems.ItemIndex = -1 then begin
  156.     ShowSelectMsg;
  157.     Exit;
  158.   end;
  159.   OldSQLItems := TSQLItems.Create(FSQLSet);
  160.   try
  161.     OldSQLItems.Assign(SQLItems);
  162.     SQLItems.Clear;
  163.     i1:=0;
  164.     for i := 0 to lbSQLItems.Items.Count - 1 do
  165.       if lbSQLItems.Selected[i] then inc(i1)
  166.       else begin
  167.         SQLItems.Add;
  168.         SQLItems.Items[i-i1].Assign(OldSQLItems.Items[i]);
  169.       end;
  170.     i := lbSQLItems.ItemIndex;
  171.     RefreshItems;
  172.     if i<=lbSQLItems.Items.Count-1 then lbSQLItems.ItemIndex:=i
  173.     else lbSQLItems.ItemIndex:=lbSQLItems.Items.Count-1;
  174.     if lbSQLItems.ItemIndex>-1 then begin
  175.       SelectItem(lbSQLItems.ItemIndex);
  176.       UpdateScreen(SQLItems.Items[lbSQLItems.ItemIndex]);
  177.     end
  178.     else begin
  179.       SelectItem(0);
  180.       ClearScreen;
  181.     end;
  182.   finally
  183.     OldSQLItems.Free;
  184.   end;
  185. end;
  186.  
  187. procedure TSQLsEditor.lbSQLItemsClick(Sender: TObject);
  188. begin
  189.   UpdateScreen(SQLItems.Items[lbSQLItems.ItemIndex]);
  190. end;
  191.  
  192. procedure TSQLsEditor.edTitleExit(Sender: TObject);
  193. var
  194.   i: Integer;
  195. begin
  196.   if TitleChanged then begin
  197.     TitleChanged:=false;
  198.     If lbSQLItems.SelCount = 0 then ShowSelectMsg
  199.     else for i := 0 to lbSQLItems.Items.Count - 1 do
  200.       If lbSQLItems.Selected[i] then begin
  201.         SQLItems.Items[i].Title := edTitle.Text;
  202.         lbSQLItems.Items[i]:='Item_' + IntToStr(i) + ': ' + edTitle.Text;
  203.         lbSQLItems.Selected[i]:=true;
  204.       end;
  205.   end;
  206. end;
  207.  
  208. procedure TSQLsEditor.edTitleChange(Sender: TObject);
  209. begin
  210.   TitleChanged:=true;
  211. end;
  212.  
  213. procedure TSQLsEditor.mSQLExit(Sender: TObject);
  214. var
  215.   i: Integer;
  216. begin
  217.   if SQLTextChanged then begin
  218.     SQLTextChanged:=false;
  219.     If lbSQLItems.SelCount = 0 then ShowSelectMsg
  220.     else for i := 0 to lbSQLItems.Items.Count - 1 do
  221.       If lbSQLItems.Selected[i] then
  222.         SQLItems.Items[i].SQLText := mSQL.Text;
  223.   end;
  224. end;
  225.  
  226. procedure TSQLsEditor.mSQLChange(Sender: TObject);
  227. begin
  228.   SQLTextChanged:=true;
  229. end;
  230.  
  231. end.
  232.