
- •Зертханалық жұмыс №1 (6сағат) байланыспаған кестелермен және локалды деректер базасымен жұмыс жасау
- •6.1. Локалды деректер базасымен жұмыс істеуге арналған қосымша
- •6.1.1. Жұмыстың мақсаты
- •6.1.2. Жұмысты орындауға арналған тапсырмалар
- •6.1.3. Қосымшаны құрастыру процесі
- •6.1.4. Деректер базасының псевдонимін құру
- •6.1.5. Деректер базасы кестесінің жазбаларының құрылымын жасау
- •6.1.6. Негізгі форма мен оның дб-мен жұмыс істейтін компоненттерін жасау
- •6.1.6.1. Негізгі компоненттерді орналастыру мен жөндеу
- •6.1.6.2. Панельдерді орналастыру және жөндеу
- •6.1.6.3. DbGrid компонентін жөндеу
- •6.1.6.4. Есептелетін өрісті құру
- •6.1.6.5. Форманы кестенің өрістер редакторынан алынған терезелермен толықтыру
- •6.1.8. «Деректерді көрсету» ішкі мәзірінің әдістері
- •6.1.8.1. Query компонентінің көмегімен сұрату арқылы таңдау
- •6.1.8.2. Table және Query компоненттерінің фильтрлерімен таңдау
- •6.1.9. Мәліметтерді сұрыптау әдістері
- •6.1.10. Мәліметтерді іздеу әдістері
- •6.1.12. ‘График’ мәзірі командасы әдісі және графиктің бапталуы
- •6.1.14. Проект мысалының листингісі
- •6.1.15. Локальдық мәліметтер қорымен жұмыс үшін тапсырмалар нұсқалары
- •6.1.16. Бақылау сұрақтары
- •6.2. Екі кестені біріктіруге арналған қосымша 1:1
- •6.2.1. Жұмыстың орындалу мақсаты және тапсырмалары
- •6.2.2. Қосымшаны өңдеу процесі
- •6.2.3. Екі кестедегі мәліметтерді біріктіру әдісі
- •6.2.4. Бақылау сұрақтары
- •6.3. Бір типті мәліметтер базасының кестелерінің қосу, ажырату және жасау қосымшасын құру
- •6.3.1. Жұмыстың орындалу мақсаты және тапсырмалары
- •6.3.2. Қосымшаны өңдеу процесі
- •6.3.3. Екі кестенің мәліметтерімен жұмыс жасауға арналған әдіс
- •6.3.4. Бақылау сұрақтары
- •Зертханалық жұмыс №2(4 сағат). Кестелермен байланысқан локальдық мәліметтер базасымен жұмыс
- •7.1. Тәуелді кесте жазбаларының құрылымын өңдеу үшін орнатылған Lockup қасиеті көмегімен кестелерден жіберілетін мәнді таңдауға арналған қосымша құру
- •7.1.1 Программаның орындалу мақсаты және тапсырмалары
- •7.1.2. Қосымшаны өңдеу процесі
- •7.1.3. Екі кестенің деректерімен жұмыс жасауға арналған әдіс
- •7.1.4. Бақылау сұрақтары
- •7.2. Тәуелді кестенің жаңа өрісін құру кезіндегі өрістердің редакторы көмегімен анықталған мүмкін болатын мәндерді таңдауға арналған кестесі бар қосымша
- •7.2.1. Жұмыстың мақсаты, тапсырмасы және орындалу процесі
- •7.2.2. Бақылау сұрақтары
- •7.3. Referential Integrity қасиетінің көмегімен байланысқан кестелерге арналған қосымша
- •7.3.1. Жұмыстың мақсаты және орындалу тапсырмасы
- •7.3.2. Жұмыстың орындалу барысы
- •7.3.3. Бақылау сұрақтары
6.1.14. Проект мысалының листингісі
Листинг 6.1. Есептелетін өрістерді анықтау үшін және сұрыптауға арналған өрістердің негізгі формасының модулі әдістерінің фрагменті
//Table1 үшін есептелетін өрістің мәнін анықтау
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
Table1NRS.Value := Table1RS.Value * 1.5;
end;
//--------------------------------------------------------
//Query1 үшін есептелетін өрістің мәнін анықтау
procedure TForm1.Query1CalcFields(DataSet: TDataSet);
begin
Query1NRS.Value := Query1RS.Value * 1.5;
end;
//--------------------------------------------------------
//зачетка номері бойынша сұрыптау
procedure TForm1.N16Click(Sender: TObject);
begin
DataSource1.DataSet:=Table1;
if Table1.Filtered=True then Table1.Filtered:=False;
Table1.IndexFieldNames:='NZ';
end;
//--------------------------------------------------------
// FIO бойынша сұрыптау
procedure TForm1.N17Click(Sender: TObject);
begin
DataSource1.DataSet:=Table1;
if Table1.Filtered=True then Table1.Filtered:=False;
Table1.IndexFieldNames:='FIO';
end;
//--------------------------------------------------------
// RS бойынша сұрыптау
procedure TForm1.N10Click(Sender: TObject);
begin
DataSource1.DataSet:=Table1;
if Table1.Filtered=True then Table1.Filtered:=False;
Table1.IndexFieldNames:='RS';
end;
Листинг 6.2. Локальді дерек қорымен жұмыс істеуге арналған қосымшаның негізгі формасының модулінің тексті
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, Grids,Menus, ExtCtrls, DBCtrls, Grids, DBGrids, DB, DBTables, Mask, Menus, StdCtrls, ComCtrls, Variants;
type
TForm1 = class(TForm) //-тип – мұрагер
//ДҚ-мен жұмыс істеуге арналған компоненттер
Table1: TTable; //-деректер кестесімен байланыс үшін
Query1: TQuery; //-статикалық сұраныс және фильтр үшін
Query2: TQuery; //-динамикалық сұраныс үшін
Query3: TQuery; //-құрылатын сұраныс үшін
DataSource1: TDataSource;//-көрсетілім компоненттерімен
//байланыс үшін
DBNavigator1: TDBNavigator;//-мәліметтерді басқару үшін
DBGrid1: TDBGrid; //-қордың мәліметтерінен
//тұратын кесте
//Кестенің статикалық
//өрістерінің аттары
Table1NRS: TFloatField; //-жаңа стипендия–есептелетін өріс
Table1NZ: TSmallintField;//-зачетка номері
Table1FIO: TStringField; //-фамилия
Table1RS: TFloatField; //-стипендия мөлшері
Table1FOTO: TGraphicField;//-фотосурет
//Жазбалар мен терезелер
Label1: TLabel; //-Зачетка номері
DBEdit1: TDBEdit; //-NZ үшін терезе
Label2: TLabel; //-Фамилия, инициалдар
DBEdit2: TDBEdit; //-FIO үшін терезе
Label3: TLabel; //-Стипендия
DBEdit3: TDBEdit; //-RS үшін терезе
Label4: TLabel; //-Жаңа стипендия
DBEdit4: TDBEdit; //-NRS үшін терезе
Label5: TLabel; //-Студенттің фотосуреті
DBImage1: TDBImage; //-FOTO үшін терезе
MainMenu1: TMainMenu; //Негізгі мәзір
//мәзірдегі пункттердің аттары
N1: TMenuItem; //-Показать данные
N8: TMenuItem; //-все
N9: TMenuItem; //-Отбора запросами с пунктами:
N11: TMenuItem; //-с N>150
N12: TMenuItem; //-с заданным NZ
N15: TMenuItem; //-с заданным запросом
N10: TMenuItem; //-Отбора фильтром с пунктами
N13: TMenuItem; //-для таблицы
N14: TMenuItem; //-для Query
N2: TMenuItem; //-Сортировать по:
N16: TMenuItem; //-номерам зачеток
N17: TMenuItem; //-фамилиям
N18: TMenuItem; //-размеру стипендии
N3: TMenuItem; //-Поиск
N19: TMenuItem; //-по фамилии
N20: TMenuItem; //-быстрый
N21: TMenuItem; //-ближайшего подходящего
N22: TMenuItem; //-постепенный
N23: TMenuItem; //-по фамилии и стипендии
N4: TMenuItem; //-Вычислить
N24: TMenuItem; //-сумму стипендий
N25: TMenuItem; //-среднюю стипендию
N5: TMenuItem; //-График
N6: TMenuItem; //-Отчет с пунктами
N26: TMenuItem; //-предварительный просмотр
//отчета
N27: TMenuItem; //-печать отчета
N7: TMenuItem; //-Выход
Timer1: TTimer; //-уақытты көрсету үшін
StatusBar1: TStatusBar; //-күй панелі
//Query компоненттерінің
статикалық өрістерінің аттары
Query1NZ: TSmallintField; //-зачетка номері
Query1FIO: TStringField; //-фамилия
Query1RS: TFloatField; //-стипендия мөлшері
Query1NRS: TFloatField; //-жаңа стипендия–есептелетін өріс
Query1FOTO: TGraphicField;//-фотосурет
Query2NZ: TSmallintField; //-зачетка номері
Query2FIO: TStringField; //-фамилия
Query2RS: TFloatField; //-стипендия мөлшері
Query2FOTO: TGraphicField;//-фотосурет
Query2NRS: TFloatField; //-жаңа стипендия–есептелетін өріс
Query3NZ: TSmallintField;//-зачетка номері
Query3FIO: TStringField; //-фамилия
Query3RS: TFloatField; //-стипендия мөлшері
Query3FOTO: TGraphicField;//-фотосурет
Query3NRS: TFloatField; //-жаңа стипендия–есептелетін өріс
Label11: TLabel; //Сумма стипендий=
Panel1: TPanel; //-Label6,Edit1,Poisk үшін
Edit1: TEdit; //-қажет фамилияны енгізу үшін
Poisk: TButton; //-Искать – іздеуді бастау
Label6: TLabel; //-Введите ФИО и нажмите Искать
Panel2: TPanel; //-Label7,MaskEdit1 үшін
MaskEdit1: TMaskEdit; //-зачетка номері немесе
//-стипендия мөлшерін енгізу үшін
Label7: TLabel; //-Введите номер зачетки
Panel3: TPanel; //-Label8,Edit2 үшін
Label8: TLabel; //-Вводите фамилия: по завершени
двойной щелчок в окне
Edit2: TEdit; //-біртіндеп іздеу кезінде ФИО
//енгізу үшін
//Қосымшаның әдістері
procedure Timer1Timer(Sender: TObject);//-таймерді қолдану
//үшін
procedure Table1CalcFields(DataSet: TDataSet);//-Table1
//өрісін есептеу үшін
procedure MaskEdit1DblClick(Sender: TObject);//іздеу үшін мән
//енгізу
procedure Poisk Click(Sender: TObject);//-іздеуге арналған
//Искать батырмасы
procedure Edit2Change(Sender: TObject);//-терезедегі мәннің
//-өзгеруі кезінде
//Мәзір командаларын
//жүзеге асыру әдістері
procedure N5Click(Sender: TObject); //-График
procedure N7Click(Sender: TObject); //-Выход
//-Показать данные:
procedure N8Click(Sender: TObject); //-все
//Отобранные запросами:
procedure N11Click(Sender: TObject); //-с N>150
procedure N12Click(Sender: TObject); //-с заданным NZ
//-Сортировать по:
procedure N16Click(Sender: TObject); //-номерам зачеток,
//-фамилии, стипендии
//-Поиск
procedure N19Click(Sender: TObject); //-по фамилии и стипенди
procedure N22Click(Sender: TObject); //-постепенный
procedure Edit2DblClick(Sender: TObject);//біртіндеп іздеудің
//аяқталуы
//-Вычислить
procedure N24Click(Sender: TObject); //-сумму стипендий
procedure N25Click(Sender: TObject); //-среднюю стипендию
//-Отчет
procedure N26Click(Sender: TObject); //-предварительный
//-просмотр отчета
procedure N27Click(Sender: TObject); //-печать отчета
procedure Label11Click(Sender: TObject); //-хабарламалы
//белгіні жасыру
Var Form1: TForm1;
J:integer;
S:real;
implementation
uses Unit2, Unit3;
{$R *.dfm}
//-----------------------------------------------------------
//Ағымдағы уақытты көрсету
procedure TForm1.Timer1Timer(Sender: TObject);
begin
StatusBar1.Panels[2].Text:=TimeToStr(Time);
end;
//-----------------------------------------------------------
//есептелетін өрістің мәнін анықтау – 1 Әдіс Table1, Query1, //Query2, Query3 үшін
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
with DataSet do //деректер жиынына параметрдің қосылуы
FieldByName('RNS').AsFloat:=FieldByName('RS').AsFloat * 1.5;
end;
//-----------------------------------------------------------
//Tag-та берілген номер бойынша сұрыптау: Tag=0 - NZ,1 – RS,2 //– FIO, N16-N18 пункттері
procedure TForm1.N16Click(Sender: TObject);
begin DataSource1.DataSet:=Table1; // Table1 арқылы ДҚ-ға
//қосылу
if Table1.Filtered=True then
Table1.Filtered:=False; //фильтрді өшіру
with Sender as TMenuItem do //мәзір пунктіне қосылу
//өріс номері бойынша IndexDefs өрістер тізімінен сұрыптау //үшін өріс атын орнату. Өріс номері Tag қасиетінде берілген
Table1.IndexFieldNames:=Table1.IndexDefs[0].Fields;
end;
//-----------------------------------------------------------
//Барлық мәліметтерді көрсету
procedure TForm1.N8Click(Sender: TObject);
begin // Table1 арқылы ДҚ-ға қосылу
if Table1.Filtered=True then
Table1.Filtered:=False; //фильтрді өшіру
DataSource1.DataSet:=Table1; // Table1 арқылы көрсетуге қосу
end;
//-----------------------------------------------------------
// Query1 статикалық сұранысымен іріктеу, N>150
procedure TForm1.N11Click(Sender: TObject);
begin
if Query1.Filtered=true then
Query1.Filtered:=false; //фильтрді өшіру
if Query1.Active=false then Query1.Active:=true;//Query1-ді
// белсенді ету
DataSource1.DataSet:=Query1; //Query1 арқылы көрсетуге қосу
end;
//-----------------------------------------------------------
//N12-N15 мәзір пункттері үшін әдістер. Мәліметтерді //іріктеуге дайындық.J Tag-тың мәнімен анықталады(6.2кесте)
procedure TForm1.NZ1Click(Sender: TObject);
begin
With sender as TMenuItem do begin //мәзір пунктіне қосылу
J:=Tag; //іріктеу белгісінің мәнін орнату
Panel2.Visible:=True; // Label7 және MaskEdit1-мен
Label7.WordWrap:=True;Label7.Height:=39;Label7.Width:=146;
Label7.Caption:='Введите номер зачетки и дважды щелкните в окне';
end;
end;
//-----------------------------------------------------------
// MaskEdit1 терезесіне шертуден-мәндерді іріктеу процесі
procedure TForm1.MaskEdit1DblClick(Sender: TObject);
var A:integer; //TNZ үшін параметр мәні
begin // динамикалық сұраныс бойынша көрсету үшін
мәліметтерді іріктеу
case J of
1: begin //Query2 арқылы мәліметтерді іріктеу - SQL динамикалық сұраныс бойынша
if Query2.Filtered=true then Query2.Filtered:=false;
DataSource1.DataSet:=Query2;
A:=StrToInt(MaskEdit1.Text); //А-шындық параметрі
with Query2 do begin //Query2-ге қосылу
Close; //деректер жиынтығын жабу
//Query2.Active:=False;//немесе
//ParamByName('NZ').Value:=A;//параметрді жіберу немесе
Params[0].AsInteger:=A;
Open; //деректер жиынтығын ашу
//Query2.Active:= True; //немесе
end;end;
2: begin // SQL берілген(құрылатын) сұранысы бойынша іріктеу
DataSource1.DataSet:=Query3; // Query3 бойынша қосылу
Query3.Close; //ДҚ-дан Query3-ті ажырату
Query3.SQL.Clear; //алдынғы сұранысты кетіру
Query3.SQL.Add //сұраныстың құрылуы
('SELECT * FROM Stud1 WHERE Stud1.NZ > '+MaskEdit1.Text);
Query3.Open; // Query3-тің белсенді болуы
end;
3: begin // Table1 фильтрі арқылы мәліметтерді іріктеу
DataSource1.DataSet:=Table1; //Table1 арқылы қосылу
if Table1.Filtered=false then
Table1.Filtered:=True; //фильтрді қосу
Table1.Filter:='NZ>'+MaskEdit1.Text; //фильтрді құру
end;
4: begin // Query1 фильтрі арқылы мәліметтерді іріктеу
DataSource1.DataSet:=Query1; // Query1 арқылы қосылу
Query1.Close; // Query1-ді ажырату
Query1.Filter:='NZ>'+MaskEdit1.Text; //фильтрді құру
if Query1.Filtered=false then
Query1.Filtered:=True; //фильтрді қосу
//фильтрдің приоритеті SQL-ден жоғарырақ
Query1.Open; //фильтр бойынша Query1-дің белсенді болуы
end;
end; // case
Panel2.Visible:=False; // Panel2-ні көрінбейтін ету
end;
//-----------------------------------------------------------
//N19 – N21, 23 пункттері үшін әдістер
//Іздеуге дайындық; J Tag-тың 6.4 кестедегі мәнімен //анықталады
procedure TForm1.N19Click(Sender: TObject);
begin //ағымдағы мәзір пунктіне қосылу
With sender as TMenuItem do begin
J:=Tag; //іздеу белгісі мәнін орнату
Panel1.Visible:=True; // Panel1-ді көрінетін ету
Edit1.SetFocus; // Edit1-ге фокус
if J=8 then begin //фамилия және стипендия бойынша
//іздеу үшін
Panel2.Visible:=True;
MaskEdit1.SetFocus;
Label2.Caption:='Введите размер стипендии:';
end;
end;
end;
//-----------------------------------------------------------
//Искать – іздеу процесі
procedure TForm1.PoiskClick(Sender: TObject);
procedure S1; //сәтті нәтиже туралы хабарлама
begin
MessageDlg('Запись найдена',mtInformation,[mbOK],0);
end;
procedure S2; //сәтсіз нәтиже туралы хабарлама
begin Beep;
MessageDlg('Запись не найдена',mtInformation,[mbOK],0);
end;
begin
case J of //фамилия бойынша іздеу
5: begin Table1.IndexFieldNames:='FIO';
Table1.SetKey;
Table1.FieldByName('FIO').AsString:=Edit1.Text;
if Table1.GotoKey then S1 //жазба табылды
else S2; //жазба табылған жоқ
end;
6: if Table1.Locate('FIO',Edit1.Text,[loCaseInsensitive, loPartialKey])
then S1 else S2;
7: begin //ең жақын сәйкестік бойынша іздеу
Table1.IndexFieldNames:='FIO'; //индекс орнату міндетті
Table1.SetKey; //деректер жинағын іздеу режиміне
// ауыстырады
Table1.FieldByName('FIO').AsString:=Edit1.Text;
Table1.GotoNearest; // жақын сәйкестік бойынша іздеу
end;
8: begin //фамилия және стипендия бойынша іздеу
if Table1.Locate('FIO;RS',
VarArrayOf([Edit1.Text, //фамилия және
MaskEdit1.Text]), //стипендия бойынша
[loCaseInsensitive,loPartialKey])
then S1 else S2;
Panel2.Visible:=false; // стипендияның мәні бар Panel2-ні
//көрінбейтін ету
end;
end; //Case
Panel1.Visible:=false; //фамилиясы бар панельді жасыру
end;
//-----------------------------------------------------------
//Біртіндеп іздеуге дайындық – фамилияны енгізуге арналған
// панельді көрсету
procedure TForm1.N22Click(Sender: TObject);
begin
Panel3.Visible:=true; // Panel3-ні көрінетін ету
Edit2.SetFocus; // Edit2-ге фокус
end;
//-----------------------------------------------------------
//Біртіндеп іздеу
procedure TForm1.Edit2Change(Sender: TObject);
begin
Table1.IndexFieldNames:='FIO';//баған бойынша іздеуге
// арналған индекс
Table1.FindNearest([Edit2.Text]); //жақын сәйкесті іздеу
end;
//-----------------------------------------------------------
//Біртіндеп іздеуді аяқтау
procedure TForm1.Edit2DblClick(Sender: TObject);
begin
Panel3.Visible:=false; // Panel3-ті жасыру
end;
//-----------------------------------------------------------
//Операторлар көмегімен стипендия суммасын есептеу
procedure TForm1.N24Click(Sender: TObject);
var st:string; //стипендия суммасын шығаратын жол
begin Table1.First; //бірінші жазбаға өту
S:=0; //суммарлы стипендия
while not (Table1.Eof) do //кестенің файлының соңына дейін
begin //стипендия суммасы
//S:=S+Nable1.Fields[2].AsFloat; //2-ші бағаннан немесе
S:=S+Table1RS.Value; //осылай оңайырақ!
Table1.Next; //келесі жазбаға өту
end; //жолды құру
st:=FloatToStr(S);//немесе
//Str(S:12:2,st); //немесе форматтаумен
Label11.Caption:='Сумма стипендий = '+st;//хабарламаны
// шығару
Label11.Visible:=true; //белгіні көрсету
end;
//-----------------------------------------------------------
//орташа стипендияны есептеу
procedure TForm1.N25Click(Sender: TObject);
var st:string;
n:integer;
begin
n:=Table1.RecordCount; //кесте жазбаларының саны
N24Click(Sender); //стипендия суммасын есептейтін әдісті
// шақыру
s:=s/n; //орташа стипендияны анықтау
st:=FloatToStr(s); //жолдың құрылуы
Label11.Caption:='Средняя стипендия = '+st;//хабарламаны
//шығару
Label11.Visible:=true; //белгіні көрсету
end;
//-----------------------------------------------------------
//Графигі бар форманы көрсету
procedure TForm1.N5Click(Sender: TObject);
begin
Form2.Show;
end;
//-----------------------------------------------------------
//Қарау үшін есеп беруі бар форманы көрсету
procedure TForm1.N26Click(Sender: TObject);
begin
Form3.QuickRep1.Preview; //алдын ала қарау
end;
//-----------------------------------------------------------
//Есеп беруді баспаға шығару
procedure TForm1.N27Click(Sender: TObject);
begin
Form3.QuickRep1.Print;
end;
//-----------------------------------------------------------
//Хабарламасы бар белгіні жасыру
procedure TForm1.Label11Click(Sender: TObject);
begin
Label11.Visible:=False;
end;
//-------------------------------------------------------------------------------------------
//Қосымшаның жабылуы
procedure Tform1.N7Click(Sender:Tobject);
begin Close; end;
end.
Листинг 6.3. Графигі бар форма модулінің мәтіні
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, DbChart, Series, StdCtrls;
type
TForm2 = class(TForm)
DBChart1: TDBChart;
Series1: TLineSeries;
Series2: TLineSeries;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1,Unit3;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
Form2.Hide;
end;
end.
Листинг 6.4. Есеп беруі бар форма модулінің мәтіні
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, QRCtrls, QuickRpt, ExtCtrls, Menus;
type
TForm3 = class(TForm)
QuickRep1: TQuickRep;
QRBand1: TQRBand;
QRLabel1: TQRLabel;
QRBand2: TQRBand;
QRLabel2: TQRLabel;
QRLabel3: TQRLabel;
QRLabel4: TQRLabel;
QRLabel5: TQRLabel;
QRBand3: TQRBand;
QRBand4: TQRBand;
QRDBText1: TQRDBText;
QRDBText2: TQRDBText;
QRDBText3: TQRDBText;
QRDBText4: TQRDBText;
QRDBImage1: TQRDBImage;
QRExpr1: TQRExpr;
QRExpr2: TQRExpr;
QRLabel6: TQRLabel;
QRLabel7: TQRLabel;
QRLabel8: TQRLabel;
QRLabel9: TQRLabel;
QRSysData1: TQRSysData;
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit1,Unit2;
{$R *.dfm}
procedure TForm3.N1Click(Sender: TObject);
begin
Form3.Hide;
end; end.