unit AdminUnit;

interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, BaseGrid, DBAdvGrid, StdCtrls, AdvGlowButton,
  AdvEdit, Spin, AdvPicture, ExtCtrls, AdvPageControl, ComCtrls, DB, StdActns,
  ExtActns, ActnList, ExtDlgs, AdvPanel, AdvGrid, Jpeg;

type
  TAdminForm = class(TForm)
    Admin_PC: TAdvPageControl;
    PointsPanel: TAdvTabSheet;
    Panel1: TPanel;
    Point_param_label: TLabel;
    point_param_name_label: TLabel;
    Point_param_opis_label: TLabel;
    pict: TAdvPicture;
    point_param_name_znach: TLabel;
    point_param_num_znach: TLabel;
    point_param_opis_znach: TLabel;
    Panel2: TPanel;
    point_param__ins_num_label: TLabel;
    point_image_label: TLabel;
    point_image_size_label: TLabel;
    point_image_size_znach_label: TLabel;
    point_image: TAdvPicture;
    point_image_size_znach: TLabel;
    Point_param_SE: TSpinEdit;
    point_param_name_edit: TAdvEdit;
    point_param_ops_edit: TAdvEdit;
    point_image_label_load: TAdvGlowButton;
    point_param_reset_btn: TAdvGlowButton;
    point_param_save_btn: TAdvGlowButton;
    AdvTabSheet8: TAdvTabSheet;
    AdvTabSheet9: TAdvTabSheet;
    AdvTabSheet10: TAdvTabSheet;
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    AdvTabSheet11: TAdvTabSheet;
    Admin_pp_DBGrid: TDBAdvGrid;
    ActionList: TActionList;
    Show_points_table: TAction;
    Show_params_table: TAction;
    Add_point: TAction;
    Add_param: TAction;
    Del_point: TAction;
    ImageFileOpen: TOpenPicture;
    Del_param: TAction;
    Red_point: TAction;
    Red_param: TAction;
    Initial_load: TAction;
    Admin_add_point_param: TAdvGlowButton;
    Admin_del_point_param: TAdvGlowButton;
    Admin_red_point_param: TAdvGlowButton;
    Admin_navigate_panel: TAdvPanelGroup;
    Panel3: TPanel;
    Panel4: TPanel;
    Admin_show_points_panel: TAdvPanel;
    Admin_show_params_panel: TAdvPanel;
    Admin_show_measure_panel: TAdvPanel;
    Admin_show_points_label: TLabel;
    Admin_show_params_label: TLabel;
    Admin_show_measure_label: TLabel;
    default_points_params: TAdvGlowButton;
    Make_default: TAction;
    procedure Show_points_tableExecute(Sender: TObject);
    procedure Add_pointExecute(Sender: TObject);
    procedure point_image_label_loadClick(Sender: TObject);
    procedure point_param_save_btnClick(Sender: TObject);
    procedure point_param_reset_btnClick(Sender: TObject);
    procedure Del_pointExecute(Sender: TObject);
    procedure Admin_pp_DBGridSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure Show_params_tableExecute(Sender: TObject);
    procedure Add_paramExecute(Sender: TObject);
    procedure Del_paramExecute(Sender: TObject);
    procedure Red_pointExecute(Sender: TObject);
    procedure Red_paramExecute(Sender: TObject);
    procedure Initial_loadExecute(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Admin_pp_DBGridDblClickCell(Sender: TObject; ARow, ACol: Integer);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Admin_pp_DBGridKeyPress(Sender: TObject; var Key: Char);
    procedure Admin_show_points_labelClick(Sender: TObject);
    procedure Admin_show_params_labelClick(Sender: TObject);
    procedure ImageFileOpenAccept(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure GetResourceAsJpeg(const resname: string; AInstance: Cardinal; aImage: TAdvPicture);
    procedure Make_defaultExecute(Sender: TObject);
  private
    { Private declarations }
  public
      admin_db_cur_table:string;  //точки или параметры{ Public declarations }
      db_grid_cur_row_num:integer; //текущий ряд таблички
      act:string;   //действие для кнопки сохранить
                //варианты - сохранение и обновление
      backrow:integer;  // номер ряда на который пойдет возвращение
  end;

var
  AdminForm: TAdminForm;

implementation

uses MainUnit, DataUnit, ConstUnit;

{$R *.dfm}
////////////////////////////////
/// ОБЩИЕ ПРОЦЕДУРЫ ФОРМЫ    ///
////////////////////////////////
procedure TAdminForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
MainForm.Show_all_pat.Execute;
end;

procedure TAdminForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
// при нажатии Esc
if key=#27 then
begin
// в случае если не происходит добавления или редактирования точки/параметрыа
// закрываем форму
  if act='' then
    begin
      AdminForm.CloseModal;
      AdminForm.Close;
    end
//если происходит то возращаемся к исходному состоянию
  else if admin_db_cur_table='points' then Show_points_table.Execute
  else if admin_db_cur_table='params' then Show_params_table.Execute;
//нажатие f5 на таблице - обновление
if (GetKeyState(vk_f5)   AND 128)=128 then
if admin_db_cur_table='points' then Show_points_table.Execute
  else if admin_db_cur_table='params' then Show_params_table.Execute;

end;

end;
procedure TAdminForm.FormShow(Sender: TObject);
begin
//пока не сделано: инициализация переменной для возвращения на запись в БД
backrow:=1;
Initial_load.Execute;
end;

procedure TAdminForm.ImageFileOpenAccept(Sender: TObject);
begin
if ImageFileOpen.Dialog.FileName<>'' then
  try
    point_image.Picture.LoadFromFile(ImageFileOpen.Dialog.FileName);
  finally
    point_image_size_znach_label.Caption:=image_size_label+GetFileSize(ImageFileOpen.Dialog.FileName);
  end
else
  begin
    //что будет если файл не выбран
  end;
//ImageFileOpen.Dialog.FileName:='';
end;

procedure TAdminForm.point_image_label_loadClick(Sender: TObject);
begin
//картинка по идее нахлодится в корневой директории приложения, поэтому
// устанавливаем начальный путь в директории с exe файлом
ImageFileOpen.Dialog.InitialDir:=ExtractFilePath(Application.ExeName);
ImageFileOpen.Execute;
end;

procedure TAdminForm.Initial_loadExecute(Sender: TObject);
begin
if admin_db_cur_table='points' then
  begin
    AdminForm.Show_points_table.Execute;
  end
else if admin_db_cur_table='params' then
  begin
    AdminForm.Show_params_table.Execute;
  end;
Admin_pp_DBGrid.SetFocus;
act:='';

end;

procedure TAdminForm.Make_defaultExecute(Sender: TObject);
var
  h: THandle;
  stream:TMemoryStream;
  points_Array: array[1..24,1..2] of string;
  params_Array: array[1..10,1..2] of string;
  I: Integer;
begin
if MessageBox(0,
      PChar(make_defaut_message),
      PChar(mess_caption),
      MB_ICONQUESTION or MB_OKCANCEL
      )=mrOK then
begin
    if AdminForm.admin_db_cur_table='points' then
      begin
          //Записываем всю информацию о точках
          points_Array[1,1]:='PL1_r';points_Array[13,1]:='RP1_r';
          points_Array[2,1]:='GL1_r';points_Array[14,1]:='F1_r';
          points_Array[3,1]:='MC9_r';points_Array[15,1]:='E45_r';
          points_Array[4,1]:='TR1_r';points_Array[16,1]:='VB44_r';
          points_Array[5,1]:='C9_r';points_Array[17,1]:='R0_r';
          points_Array[6,1]:='IG1_r';points_Array[18,1]:='V67_r';
          points_Array[7,1]:='PL1_l';points_Array[19,1]:='RP1_l';
          points_Array[8,1]:='GL1_l';points_Array[20,1]:='F1_l';
          points_Array[9,1]:='MC9_l';points_Array[21,1]:='E45_l';
          points_Array[10,1]:='TR1_l';points_Array[22,1]:='VB44_l';
          points_Array[11,1]:='C9_l';points_Array[23,1]:='R0_l';
          points_Array[12,1]:='IG1_l';points_Array[24,1]:='V67_l';

          points_Array[1,2]:='PL1_r';points_Array[13,2]:='RP1_r';
          points_Array[2,2]:='GL1_r';points_Array[14,2]:='F1_r';
          points_Array[3,2]:='MC9_r';points_Array[15,2]:='E45_r';
          points_Array[4,2]:='TR1_r';points_Array[16,2]:='VB44_r';
          points_Array[5,2]:='C9_r';points_Array[17,2]:='R0_r';
          points_Array[6,2]:='IG1_r';points_Array[18,2]:='V67_r';
          points_Array[7,2]:='PL1_l';points_Array[19,2]:='RP1_l';
          points_Array[8,2]:='GL1_l';points_Array[20,2]:='F1_l';
          points_Array[9,2]:='MC9_l';points_Array[21,2]:='E45_l';
          points_Array[10,2]:='TR1_l';points_Array[22,2]:='VB44_l';
          points_Array[11,2]:='C9_l';points_Array[23,2]:='R0_l';
          points_Array[12,2]:='IG1_l';points_Array[24,2]:='V67_l';

    //загружаем библиотеку
          h := LoadLibrary('pictures.dll');
          //загружаем все в базу
          if h>0 then
            begin
              //удаляем все точки:
              mysql_query(SQL_DM.mysql_query1,'DELETE FROM `'+table_points_name+';',2);
              mysql_query(SQL_DM.mysql_query1,'DELETE FROM `'+table_izm_name+';',2);

              for I := 1 to 24 do
                begin
                  //запихиваем инфу в датасет, и соответственно в базу
                  //запрос на выбор всего что есть
                  mysql_query(SQL_DM.mysql_query2, 'SELECT num, name, opisanie, image From '+table_points_name+';', 1);
                  try

                    with SQL_DM.mysql_DSQ2.DataSet do
                      begin
                        Append;

                        stream := TMemoryStream.Create;

                        GetResourceAsJpeg(points_Array[i,1],h,pict);
                        pict.picture.SaveToStream(stream);

                        (FieldByName('image') as TBlobField).LoadFromStream(Stream);
                        FieldByName('num').AsString:=inttostr(i);
                        FieldByName('opisanie').AsString:=points_Array[i,2];
                        FieldByName('name').AsString:=points_Array[i,1];
                        Post;

                      end;
                    stream.Free;
                    finally

                  end;
                end;
            end
            else Showmessage(make_default_dll_error);
          FreeLibrary(h);
          Show_points_table.Execute;
      end;
      if AdminForm.admin_db_cur_table='params' then
        begin
          params_Array[1,1]:=params_default_name1;
          params_Array[1,2]:=params_default_name_opisnie_1;
          params_Array[2,1]:=params_default_name2;
          params_Array[2,2]:=params_default_name_opisnie_2;
          params_Array[3,1]:=params_default_name3;
          params_Array[3,2]:=params_default_name_opisnie_3;
          params_Array[4,1]:=params_default_name4;
          params_Array[4,2]:=params_default_name_opisnie_4;
          params_Array[5,1]:=params_default_name5;
          params_Array[5,2]:=params_default_name_opisnie_5;
          params_Array[6,1]:=params_default_name6;
          params_Array[6,2]:=params_default_name_opisnie_6;
          params_Array[7,1]:=params_default_name7;
          params_Array[7,2]:=params_default_name_opisnie_7;
          params_Array[8,1]:=params_default_name8;
          params_Array[8,2]:=params_default_name_opisnie_8;
          params_Array[9,1]:=params_default_name9;
          params_Array[9,2]:=params_default_name_opisnie_9;
          params_Array[10,1]:=params_default_name10;
          params_Array[10,2]:=params_default_name_opisnie_10;
          //удаляем все точки:
          mysql_query(SQL_DM.mysql_query1,'DELETE FROM `'+table_param_name+';',2);
          mysql_query(SQL_DM.mysql_query1,'DELETE FROM `'+table_izm_name+';',2);
          for I := 1 to 10 do
            begin
              //запихиваем инфу в датасет, и соответственно в базу
              //запрос на выбор всего что есть
              mysql_query(SQL_DM.mysql_query2, 'SELECT id, name, opisanie From '+table_param_name+';', 1);
              try
                with SQL_DM.mysql_DSQ2.DataSet do begin
                  Append;
                  FieldByName('id').AsString:=inttostr(i);
                  FieldByName('opisanie').AsString:=params_Array[i,2];
                  FieldByName('name').AsString:=params_Array[i,1];
                  Post;
                end;
              finally

              end;
        end;
        Show_params_table.Execute;
    end;
end;
end;

procedure TAdminForm.Admin_show_params_labelClick(Sender: TObject);
begin
AdminForm.admin_db_cur_table:='params';
Show_params_table.Execute;
end;
procedure TAdminForm.Admin_show_points_labelClick(Sender: TObject);
begin
AdminForm.admin_db_cur_table:='points';
Show_points_table.Execute;
end;

procedure TAdminForm.point_param_save_btnClick(Sender: TObject);
var stream:TMemoryStream;
begin
if (admin_db_cur_table='points') and (act='add') then
begin
  //запихиваем инфу в датасет, и соответственно в базу
      //запрос на выбор всего что есть
  mysql_query(SQL_DM.mysql_query2, 'SELECT num, name, opisanie, image From '+table_points_name+';', 1);
  try
    with SQL_DM.mysql_DSQ2.DataSet do begin
         Append;

          stream := TMemoryStream.Create;
          point_image.picture.SaveToStream(stream);

          (FieldByName('image') as TBlobField).LoadFromStream(Stream);
          FieldByName('num').AsString:=inttostr(Point_param_SE.Value);
          FieldByName('opisanie').AsString:=point_param_ops_edit.Text;
          FieldByName('name').AsString:=point_param_name_edit.Text;
          Post;

          end;
    stream.Free;
  finally
    MessageBox(0,
                        PChar(add_point_to_database_mes),
                        PChar(mess_caption),
                        MB_ICONINFORMATION or MB_OK
                       );
    Show_points_table.Execute;
  end;

end
else if (admin_db_cur_table='params') and (act='add') then
     begin
        //запихиваем инфу в датасет, и соответственно в базу
        //запрос на выбор всего что есть
        mysql_query(SQL_DM.mysql_query2, 'SELECT id, name, opisanie From '+table_param_name+';', 1);
        try
          with SQL_DM.mysql_DSQ2.DataSet do begin
              Append;
              FieldByName('id').AsString:=inttostr(Point_param_SE.Value);
              FieldByName('opisanie').AsString:=point_param_ops_edit.Text;
              FieldByName('name').AsString:=point_param_name_edit.Text;
              Post;
            end;
        finally
          MessageBox(0,
                        PChar(add_param_to_database_mes),
                        PChar(mess_caption),
                        MB_ICONINFORMATION or MB_OK
                       );
          Show_params_table.Execute;
        end;
     end
else if (admin_db_cur_table='points') and (act='update') then
    begin
         backrow:=Point_param_SE.Value;
         //запихиваем инфу в датасет, и соответственно в базу
         //запрос на выбор всего что есть
          mysql_query(SQL_DM.mysql_query2, 'SELECT num, name, opisanie, image From '+table_points_name+
              ' WHERE `num`='+inttostr(Point_param_SE.Value)+';', 1);
        try
           with SQL_DM.mysql_DSQ2.DataSet do begin
                Edit;

              stream := TMemoryStream.Create;
              point_image.picture.SaveToStream(stream);

              (FieldByName('image') as TBlobField).LoadFromStream(Stream);
              FieldByName('num').AsString:=inttostr(Point_param_SE.Value);
              FieldByName('opisanie').AsString:=point_param_ops_edit.Text;
              FieldByName('name').AsString:=point_param_name_edit.Text;
              UpdateRecord;
              Post;

              end;
          stream.Free;
      finally
          MessageBox(0,
                        PChar(red_point_in_database_mes),
                        PChar(mess_caption),
                        MB_ICONINFORMATION or MB_OK
                       );
          Show_points_table.Execute;
      end;
    end
else if (admin_db_cur_table='params') and (act='update') then
     begin
        //запихиваем инфу в датасет, и соответственно в базу
        //запрос на выбор всего что есть
        mysql_query(SQL_DM.mysql_query2, 'SELECT id, name, opisanie From '+table_param_name+
         ' WHERE `id`='+inttostr(Point_param_SE.Value)+';', 1);
        try
          with SQL_DM.mysql_DSQ2.DataSet do begin
              Edit;
              FieldByName('id').AsString:=inttostr(Point_param_SE.Value);
              FieldByName('opisanie').AsString:=point_param_ops_edit.Text;
              FieldByName('name').AsString:=point_param_name_edit.Text;
              UpdateRecord;
              Post;
            end;
        finally
          MessageBox(0,
                        PChar(red_param_in_database_mes),
                        PChar(mess_caption),
                        MB_ICONINFORMATION or MB_OK
                       );
          Show_params_table.Execute;
        end;
     end;
end;
procedure TAdminForm.point_param_reset_btnClick(Sender: TObject);
begin
Initial_load.Execute;
end;

////////////////////////////////
/// ПРОЦЕДУРЫ ТАБЛИЦЫ        ///
////////////////////////////////
procedure TAdminForm.Admin_pp_DBGridDblClickCell(Sender: TObject; ARow,
  ACol: Integer);
begin
//запоминаем текущую строку
db_grid_cur_row_num:=Arow;
//тоже самое, хз пока почему :)
backrow:=ARow;
//переходим в режим редактирования
if admin_db_cur_table='points' then
    Red_point.Execute
else if admin_db_cur_table='params' then
   Red_param.Execute;
end;
procedure TAdminForm.Admin_pp_DBGridSelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
  var stream:TMemoryStream;
begin
//если в поле номера есть что-то
if Admin_pp_DBGrid.Cells[1,Arow]<>'' then
      //в зависимости от того активна какая-либо из точек делаем доступными
      //оперделенными действия
      begin
        //записываем текущее значение поля num, по пути проверяем что не
        //нажат та же строка
        if db_grid_cur_row_num<>strtoint(Admin_pp_DBGrid.Cells[1,Arow]) then
        begin
        db_grid_cur_row_num:=strtoint(Admin_pp_DBGrid.Cells[1,Arow]);
        //если открыта таблица точек
        if admin_db_cur_table='points' then
            begin
              //показываем текущие данные о точке
              point_param_num_znach.Caption:=(Admin_pp_DBGrid.Cells[1,Arow]);
              point_param_name_znach.Caption:=Admin_pp_DBGrid.Cells[2,Arow];
              point_param_opis_znach.Caption:=Admin_pp_DBGrid.Cells[3,Arow];
              // показываем изображение
              try
              //загружаем изображение в отдельный запрос
              mysql_query(SQL_DM.mysql_query1,'SELECT `image` FROM '+table_points_name+' WHERE `num`='+
                Admin_pp_DBGrid.Cells[1,Arow]+';',1);
              Pict.Picture:=nil;
              //создаем поток в памяти
              stream := TMemoryStream.Create;
              //созхраняем туда картинку
              (SQL_DM.mysql_DSQ1.DataSet.fieldbyname('image') as TBlobField).SaveToStream(stream);
              //чтобы что-нибудь записать, необходимо установить позицию потока в ноль!
              Stream.Position := 0;
              //загружаем картинку
              pict.Picture.LoadFromStream(stream);
              //уничтожаем поток
              stream.Free;
              except

              end;
              //показываем картинку
              if pict.Picture<>nil then pict.Show;
            end;
        //если открыта таблица параметров
        if admin_db_cur_table='params' then
            begin
              //показываем текущие данные о параметре
              point_param_num_znach.Caption:=(Admin_pp_DBGrid.Cells[1,Arow]);
              point_param_name_znach.Caption:=Admin_pp_DBGrid.Cells[2,Arow];
              point_param_opis_znach.Caption:=Admin_pp_DBGrid.Cells[3,Arow];
            end;
        end;
      end;
end;
procedure TAdminForm.Admin_pp_DBGridKeyPress(Sender: TObject; var Key: Char);
begin
// см. Процедуру FormKeyPress
if key=#27 then
begin
  if act='' then
    begin
      AdminForm.CloseModal;
      AdminForm.Close;
    end
  else if admin_db_cur_table='points' then Show_points_table.Execute
  else if admin_db_cur_table='params' then Show_params_table.Execute;
end;
//нажатие f5 на таблице - обновление
if (GetKeyState(vk_f5)   AND 128)=128 then
if admin_db_cur_table='points' then Show_points_table.Execute
  else if admin_db_cur_table='params' then Show_params_table.Execute;
end;

////////////////////////////////
/// ПРОЦЕДУРЫ ДЛЯ ТОЧЕК      ///
////////////////////////////////
procedure TAdminForm.Show_points_tableExecute(Sender: TObject);
var sel:boolean;
begin

//ЭЛЕМЕНТЫ ИНТЕРФЕЙСА
//Панели
Panel2.Hide;
Panel1.Show;
//Панель с общей информацией
point_param_num_znach.Caption:='';
point_param_name_znach.Caption:='';
point_param_opis_znach.Caption:='';

//Панель ввода
Point_param_SE.Value:=0;
point_param_name_edit.Clear;
point_param_ops_edit.Clear;

//все что относитмя к картинке
pict                          .Show;
point_image_label_load        .Show;
point_image_label             .Show;
point_image_size_label        .Show;
point_image_size_znach_label  .Show;
//имена меток
point_param__ins_num_label.Caption:=point_label_name;
Point_param_label.Caption:=point_label_name;

//действия
Admin_add_point_param.Action:=AdminForm.Add_point;
Admin_red_point_param.Action:=AdminForm.Red_point;
Admin_del_point_param.Action:=AdminForm.Del_point;


db_grid_cur_row_num:=-1;
//загрузка таблицы
mysql_query(SQL_DM.mysql_query3, 'SELECT num, name, opisanie FROM '+table_points_name+';', 1);

with Admin_pp_DBGrid do
begin
  DataSource:=SQL_DM.mysql_DSQ3;

  
  MainForm.Col_resize(Admin_pp_DBGrid, 'num', point_param_num_name, 45);
  MainForm.Col_resize(Admin_pp_DBGrid, 'name', point_param_name_name, 100);
  MainForm.Col_resize(Admin_pp_DBGrid, 'opisanie', point_param_opis_name_point,
      width-ColumnByFieldName['name'].Width-
      ColumnByFieldName['num'].Width-50-Admin_add_point_param.Width-5);

  Enabled:=true;
end;
sel:=true;
Admin_pp_DBGridSelectCell(self,1,backrow, sel);
act:='';
end;
procedure TAdminForm. Add_pointExecute(Sender: TObject);
begin
  // приводим все в исходное состояние
  Show_points_table.Execute;
  // таблица недоступна
  Admin_pp_DBGrid.Enabled:= false;
  // режим добавления для кнопки сохранения
  act:='add';
  // показываем панель ввода
  Panel1.Hide;
  Panel2.Show;

  point_image_size_znach_label.Caption:=image_size_label;
//устанавливаем минимальное значение номера точки
mysql_query(SQL_DM.mysql_query1, 'SELECT max(num) From '+table_points_name+';', 1);
Point_param_SE.MinValue:=SQL_DM.mysql_DSQ1.DataSet.FieldByName('max(num)').AsInteger+1;
Point_param_SE.MaxValue:=99;
Point_param_SE.Value:=Point_param_SE.MinValue;
point_image.Picture:=nil;

end;
procedure TAdminForm. Red_pointExecute(Sender: TObject);
begin
  Admin_pp_DBGrid.Enabled     := false;

  act:='update';

  Panel1.Hide;
  Panel2.Show;

  //копируем текущие значения в поля
  Point_param_SE.Value:=        strtoint(point_param_num_znach.Caption);
  point_param_name_edit.Text:=  point_param_name_znach.Caption;
  point_param_ops_edit.Text:=   point_param_opis_znach.Caption;
  point_image.Picture:=         pict.Picture;
  pict.Picture.SaveToFile('tmp');
  point_image_size_znach_label.Caption:=image_size_label_name+GetFileSize('tmp');
  DeleteFile('tmp');
  backrow:=strtoint(point_param_num_znach.Caption);
  
end;
procedure TAdminForm. Del_pointExecute(Sender: TObject);
begin
if MessageBox(0,
               PChar(del_point_question_mes),
               PChar(mess_caption),
               MB_ICONQUESTION or MB_OKCANCEL
              )=mrOK then

  try
  mysql_query(SQL_DM.mysql_query1,'DELETE FROM `'+table_points_name+
        '` WHERE `num`='+inttostr(db_grid_cur_row_num)+';',2);
  finally

    MessageBox(0,
               PChar(del_point_from_database_mes),
               PChar(mess_caption),
               MB_ICONINFORMATION or MB_OK
              );
     Show_points_table.Execute;
  end;
end;

////////////////////////////////
/// ПРОЦЕДУРЫ ДЛЯ ПАРАМЕТРОВ ///
////////////////////////////////
procedure TAdminForm.Show_params_tableExecute(Sender: TObject);
var sel:boolean;
begin
//ЭЛЕМЕНТЫ ИНТЕРФЕЙСА
//Панели
Panel2.Hide;
Panel1.Show;

//Панель с общей информацией
point_param_num_znach.Caption:='';
point_param_name_znach.Caption:='';
point_param_opis_znach.Caption:='';

//Панель ввода
Point_param_SE.Value:=0;
point_param_name_edit.Clear;
point_param_ops_edit.Clear;

//все что относитмя к картинке
  pict                          .hide;
  pict.Picture:=nil;
  point_image_label_load        .hide;
  point_image_label             .hide;
  point_image_size_label        .hide;
  point_image_size_znach_label  .Hide;

point_param__ins_num_label.Caption:=param_label_name;
Point_param_label.Caption:=param_label_name;

//действия
Admin_add_point_param.Action:=AdminForm.Add_param;
Admin_red_point_param.Action:=AdminForm.Red_param;
Admin_del_point_param.Action:=AdminForm.Del_param;

//загрузка таблицы
db_grid_cur_row_num:=-1;
mysql_query(SQL_DM.mysql_query3, 'SELECT id, name, opisanie From '+table_param_name+';', 1);

with Admin_pp_DBGrid do
begin
DataSource:=SQL_DM.mysql_DSQ3;

  MainForm.Col_resize(Admin_pp_DBGrid, 'id', point_param_num_name, 45);
  MainForm.Col_resize(Admin_pp_DBGrid, 'name', point_param_name_name, 100);
  MainForm.Col_resize(Admin_pp_DBGrid, 'opisanie', point_param_opis_name_param, width-ColumnByFieldName['name'].Width-
                                             ColumnByFieldName['id'].Width-
                                             50-Admin_add_point_param.Width-5);
  Enabled:=true;
end;
sel:=true;
Admin_pp_DBGridSelectCell(self,1,backrow, sel);
act:='';

end;
procedure TAdminForm. Add_paramExecute(Sender: TObject);
begin
// см. Процедуру для точек
Show_params_table.Execute;

  Admin_pp_DBGrid.Enabled     := false;

  act:='add';

  Panel1.Hide;
  Panel2.Show;
//устанавливаем минимальное значение номера параметра
mysql_query(SQL_DM.mysql_query1, 'SELECT max(id) From '+table_param_name+';', 1);
Point_param_SE.MinValue:=SQL_DM.mysql_DSQ1.DataSet.FieldByName('max(id)').AsInteger+1;
Point_param_SE.MaxValue:=99;
Point_param_SE.Value:=Point_param_SE.MinValue;
  end;
procedure TAdminForm. Red_paramExecute(Sender: TObject);
begin
  Admin_pp_DBGrid.Enabled:= false;

  act:='update';

  Panel1.Hide;
  Panel2.Show;
//копируем текущие значения в поля
  Point_param_SE.Value:=strtoint(point_param_num_znach.Caption);
  point_param_name_edit.Text:=point_param_name_znach.Caption;
  point_param_ops_edit.Text:=point_param_opis_znach.Caption;
end;
procedure TAdminForm. Del_paramExecute(Sender: TObject);
begin
//удаление параметра
if MessageBox(0,
               PChar(del_param_question_mes),
               PChar(mess_caption),
               MB_ICONQUESTION or MB_OKCANCEL
              )=mrOK then
  try
  mysql_query(SQL_DM.mysql_query1, 'DELETE FROM `'+table_param_name+
        '` WHERE `id`='+inttostr(db_grid_cur_row_num)+';',2);
  finally

    MessageBox(0,
               PChar(del_param_from_database_mes),
               PChar(mess_caption),
               MB_ICONINFORMATION or MB_OK
              );
    Show_params_table.Execute;

  end;
end;

//вытаскивание картинок из dll
procedure TAdminForm.GetResourceAsJpeg(const resname: string; AInstance: Cardinal; aImage: TAdvPicture);
var
  Stream: TResourceStream;
begin
  try
      Stream := TResourceStream.Create(AInstance, ResName, 'JPEG');
      try
       aImage.Picture := nil;
       aImage.Picture.LoadFromStream(Stream);
       aImage.Repaint;
      finally
          Stream.Free;
      end;
  except
      on ex: EResNotFound do
      begin
          //здесь обработка исключения если ресурс не найден
      end;
  end;
end;


end.
