1

(14 replies, posted in General)

Всем привет подскажите решение:
Есть таблица и кнопка удалить. Как выглядит скрипт? Если в таблице не выделена запись то открывается форма Form2 и там уже сообщение что не выбрана запись. Если запись выбрана то она удаляется скриптом причем все связанные с ней записи.

2

(14 replies, posted in General)

Всем привет подскажите решение:
Есть таблица и кнопка удалить. Если в таблице не выделена запись то открывается форма Form2 и там уже сообщение что не выбрана запись. Если запись выбрана то она скриптом удаляться
procedure Form1_Button3_OnClick (Sender: TObject; var Cancel: boolean);
begin
    Cancel := True;
    if Form1.TableGrid1.dbItemID then
    begin
        if Confirm('Are you sure you want to delete customer? This will make its children orphan. Proceed?') then
        begin
            // make tele Customer to delete orphan
            SQLExecute(DELETE tele SET id_Customer = NULL WHERE id_Customer = '+IntToStr(Form1.TableGrid1.dbItemID));

            // proceed to delete.
            Cancel := False;
        end;
    end else
        ShowMessage('Cannot proceed without selected record');
end;

{
  Comfirm massages with "Yes or No"
}
function Confirm(msg: String='Please Confirm.'; ICON: Integer=MB_ICONQUESTION; title:String='Confirm'): boolean;
begin
    result := IDYES = MessageBox(msg, 'APPNAME : '+title, MB_YESNO+ICON);
end;.

А подскажите скрипт выделение последней созданной строки в гриде? Ум меня просто в приложении нет мышки нужно удалять по последней созданной записи smile

pavlenko.vladimir.v wrote:
chartcatuser wrote:
pavlenko.vladimir.v wrote:

что за ближайшая дата? от куда она берется?
Зачем передовать дату в DateTimePicker ?
где хранятся списки дат? даты привязаны к конкретной записи или просто свободный выбор????

Ближайшая дата из всего списка дат которые привязаны к id  Item   
я вот сделал  кое что но у меня при поиске выдает ошибку....
Вообщем я просто налепил сверху таблицу и сделал на нее поиск а сам поиск привязал к первой таблице где хранятся item ну при первом поиске все нормально выдает даты которые привязаны к конкретной записи  выходишь из формы обратно заходишь и когда пытаешься опять нажать поиск по 1 таблице выдает такую ошибку, я вот думаю может кнопку через sql  запрос сделать ?
у меня есть таблица
bsm_new - где храняться ITEM
ordert - там храняться даты там есть поле date

и вот ругается при повторном поиске >....

так а что тут не получается?

Form1.DateTimePicker1.DateTime := SQLDateTimeToDateTime(SQLexecute('SELECT name3 FROM NAMES WHERE id='+Form1.TableGrid1.sqlValue));

просто TableGrid1 смените на ComboBox1
 
но у меня все равно не полчается Вас понять, если у Вас уже есть список дат, то зачем снова создавать дату? и DateTimePicker тоже не понятно зачем нужен, просто сохраните выбранную дату из ComboBox .
зачем Вам запрос LEFT OUTER JOIN ?

Суть в том что даты подставляться к id конерктной записи и они все разные соответственно ля каждого ID. Вообщем решил проблему пересоздав всю форму заново и все заработало.. странно Но все равно спасибо за содействие в решении.
Сейчас пробую придумать как к конкретной записи ну например item1 привязать определенные даты не в ручную а медотом подсчета ( допустим к этой записи постоянно подставлялись даты только понедельника и четверга )  я пока в ручную занес на целый год прям в самой БД ))

5

(16 replies, posted in Russian)

Ребят подскажите со скриптом. Цель одна - при нажатии кнопки меняем значение checkbox с 0 на 1 и:
если checkbox= 0 то в в базе обновляется поле с суммой на цифру 0 или пустое
если checkbox= 1 то в базе ничего не обновляется цифра остается той же
Изначально есть поле в таблице :
bsm_off.checkbox
bsm_off.inn2 - это с цифрами

Вот скрипт который изменяет значение checkbox 1 или 0

begin
            SQLExecute('UPDATE bsm_off SET Vidano = '+s + ' WHERE id='+IntToStr(Form1.Tablevidacha.dbIndexToID(I)));
end;

Вот хотелось бы узнать или подтолкните в нужном направлении..

6

(3 replies, posted in Reports)

brian.zaballa wrote:

It's hard trying to create a report without the data. But have you tried having where clause?

Select employees.employees.lastname,
   Total(bsm_off.cost),Total(bsm_off.inn),
   
   Total((bsm_off.cost * bsm_off.inn))
From bsm_off
Left Join employees On employees.id = bsm_off.id_employees
Left Join orderproduct On orderproduct.id = bsm_off.id_orderproduct
WHERE bsm_off.Vidano = 1
Group By bsm_off.orderproduct

Thanks for the tip.

Ну понял. Просто мысли вперед нажатия на клавиатуру лезут..

pavlenko.vladimir.v wrote:
chartcatuser wrote:

Дорогой друг наверное тебе не столь понятно давай я тебе приведу пример более подходящий там я расписал момент. Извени за настырность..)

что за ближайшая дата? от куда она берется?
Зачем передовать дату в DateTimePicker ?
где хранятся списки дат? даты привязаны к конкретной записи или просто свободный выбор????

Ближайшая дата из всего списка дат которые привязаны к id  Item   
я вот сделал  кое что но у меня при поиске выдает ошибку....
Вообщем я просто налепил сверху таблицу и сделал на нее поиск а сам поиск привязал к первой таблице где хранятся item ну при первом поиске все нормально выдает даты которые привязаны к конкретной записи  выходишь из формы обратно заходишь и когда пытаешься опять нажать поиск по 1 таблице выдает такую ошибку, я вот думаю может кнопку через sql  запрос сделать ?
у меня есть таблица
bsm_new - где храняться ITEM
ordert - там храняться даты там есть поле date

и вот ругается при повторном поиске >....

pavlenko.vladimir.v wrote:
chartcatuser wrote:

У меня mysql выдает ошибку

видимо не выбранно поле с датой
если Вы не обратили внимание, в примере поле с датой берется  из выбора в таблице  (id='+Form1.TableGrid1.sqlValue)

Дорогой друг наверное тебе не столь понятно давай я тебе приведу пример более подходящий там я расписал момент. Извени за настырность..)

pavlenko.vladimir.v wrote:
chartcatuser wrote:

Вот более подробнее пример в закрепе:
Выбираем из таблицы запись = она равняется combobox = id=1 у которой в свою очередь парент combobox2 ( но как привязать datetimepicker) чтобы он включался при выборе combobox2 на ближаюшую дату!!! Помогите пожалуйтста
То есть у записи 1 может быть 10 разных дат но при выборе из таблице запись 1 - выбирается ближайшая дата

Form1.DateTimePicker1.DateTime := SQLDateTimeToDateTime(SQLexecute('SELECT name3 FROM NAMES WHERE id='+Form1.TableGrid1.sqlValue));

С ошибкой разобрался огромное спасибо

А второе то что когда нажимаешь на запись в таблице у меня срабатывает скрипт где показывает значение из другой таблицы:
Form1.Combobox1.Text:=SQLExecute('SELECT city FROM base WHERE id=' +Form1.TableGrid1.sqlValue );
Но потом я хочу передать с combobox1 на combobox2 тоже самое значение чтобы потом combobox3 парентом принимал значение у combobox2 он принимает но нужно еще раз нажать на combobox2 чтобы выбрать нужную запись и потом только в combobox3 появляются записи пробовал  :
procedure Form1_ComboBox2_OnKeyUp (Sender: TObject; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
    Form1.Combobox3.Text:=SQLExecute('SELECT city FROM base WHERE id=' +Form1.TableGrid1.sqlValue );
end;
Не выходит... все равно надо сначало нажать на combobox2 чтобы увидеть записи  в combobox3

Вот более подробнее пример в закрепе:
Выбираем из таблицы запись = она равняется combobox = id=1 у которой в свою очередь парент combobox2 ( но как привязать datetimepicker) чтобы он включался при выборе combobox2 на ближаюшую дату!!! Помогите пожалуйтста
То есть у записи 1 может быть 10 разных дат но при выборе из таблице запись 1 - выбирается ближайшая дата

procedure Form1_cbGroup_OnChange (Sender: TObject);
begin
    If Form1.cbGroup.dbItemID = 1 then Form1.DateTimePicker1.DateTime := Form1.DateTimePicker1.DateTime - ???? ;
end;

Но нужно присвоить на cbGroup = 1 - даты  если сегодня например 25.07.2022 - то при выборе combobox =1 будет дата 28.07.2022
Просто как вбить в определенное значение id ближаюшею дату для выбора с учетом сегодняшней

А подскажите как присвоить combobox определенные даты? Нажимаешь на combobox - и тебе предлагает ближайшую дату которую ты указал изначально для этого значения в combobox?
Например:
Нужно выбрать в combobox id - 'item1' при нажатии на combobox тебе в datetimepicker предлагает самое ближайшее число ( я так понял нужно изначально забить в combobox числа) ? помогите с примером

Спасибо будем пробовать smile

k245 wrote:
chartcatuser wrote:

Помогите с виртуалкой. Никак не могу заставить работать DateTimePicker1 что с ним не так ?

Для начала опишите ваши ожидания: как вы себе представляете логику его работы?

при нажатии на поле с датой виртуальная клавиатура изменяла его значение, тоесть я edit и memo привязал к клавиатуре а дату не получается

k245 wrote:

У вас сам проект настроен как  проект MySQL? Или как SQLite?

Чтобы пользоваться стандартной функцией SQLExecute для работы с MySQL проект должен быть тоже MySQL.


P.S. Ваш запрос работает, но он выдает размеры всех таблиц во всех схемах (БД). Обычно интересует какая-то одна. Я бы добавил условие WHERE TABLE_SCHEMA = "Название БД"

Познавательно. У меня вот база настоена на MySQL и я сижу в 1 соединениее под названием BASE в сегменте 192.168.0.1  вот и вопрос  вполне реализуемо сделать не только запрос но и изменения в другом соединение BASE2 в другой MySQL в другой сети  192.168.1.1 ? smile

Тоже стало интересно возможно ли создать в MVD таблицы потом подключится к mysql и далее где то в формах указать кнопку sql запрос к другому соединению в другой mysql ?  Никто не знает решения ?

Помогите с виртуалкой. Никак не могу заставить работать DateTimePicker1 что с ним не так ?

19

(5 replies, posted in Script)

There is a good example of a reporting panel, but is it possible to implement so that LATEST ORDER displays not all transactions, but the real number of open transactions for today? Here is an example

Вот что у меня получилось:
При нажатии кнопки ставим всем checkbox=1 и дату
При нажатии кнопки ставим всем checkbox=0 и дату
Упростить никак нельзя ? У меня при сработке procedure frmOrder_bRezervOrder_OnClick должна ставиться и дата я вывел Button2 но все как то долго происходит может есть решениее побыстрее ? )))



//Всем в таблице ставим дату
procedure frmOrder_Button2_OnClick (Sender: TObject; var Cancel: boolean);
begin
    ChangeValues100(True);
end;
procedure ChangeValues100(value: boolean);
var
    i,c: integer;
    s: string;
begin
    if value then s := frmOrder.DateRezervaOrder.sqlDate;

    c := frmOrder.TableGrid1.RowCount-1;
    for i := 0 to frmOrder.TableGrid1.RowCount -1 do
    begin
        begin
            SQLExecute('UPDATE bsm_off SET DataRezerva = '+s + ' WHERE id='+IntToStr(frmOrder.TableGrid1.dbIndexToID(i)));
        end;
    end;
    frmOrder.TableGrid1.dbUpdate;
end;
//Всем в таблице ставим =0
procedure frmOrder_bNetDenegOrder_OnClick (Sender: TObject; var Cancel: boolean);
var
i : integer;
s: string;
begin
    For i:= 0 to frmOrder.TableGrid1.RowCount -1 do
    Begin
    If frmOrder.TableGrid1.Cell[0,i].AsBoolean = True   then
    s := '0' else s := '1';
    Begin
         SQLExecute('UPDATE bsm_off SET Rezerv = '+s +' WHERE id='+IntToStr(frmOrder.TableGrid1.dbIndexToID(i)));
    End;
    frmOrder.Button2.Click;
    End;
    frmOrder.TableGrid1.dbUpdate;
    frmOrder.Button5.Click;
end;
//Всем в таблице ставим =1
procedure frmOrder_bRezervOrder_OnClick (Sender: TObject; var Cancel: boolean);
var
i : integer;
s: string;
begin
    For i:= 0 to frmOrder.TableGrid1.RowCount -1 do
    Begin
    If frmOrder.TableGrid1.Cell[0,i].AsBoolean = True   then
    s := '1' else s := '0';
    Begin
    SQLExecute('UPDATE bsm_off SET Rezerv = '+s +' WHERE id='+IntToStr(frmOrder.TableGrid1.dbIndexToID(i)));
    End;
    frmOrder.Button2.Click;
    frmOrder.TableGrid1.dbUpdate;
    frmOrder.Button5.Click;
end;
end;

k245 wrote:
chartcatuser wrote:

Клавиатура используется для ввода логина и пароля на терминале с сенсорным экраном smile

Вы создаете программы для терминалов? И часто заказывают?

Подскажи если не трудно вариант решения
Я прикладываю проект я не могу  объединить два скрипта: суть в таблице определеные значения одной нопкой жмем и сразу всем присваиваеться статус checkboxa = 1 или 0   и автоматом ставиться дата тоже всем

k245 wrote:
chartcatuser wrote:

Клавиатура используется для ввода логина и пароля на терминале с сенсорным экраном smile

Вы создаете программы для терминалов? И часто заказывают?

да всего пару раз.... это не заказ, я не занимаюсь в коммерческих целях. чисто по знакомству)

Все разобрался )

//frmZakaz
procedure frmZakaz_Memo1_OnMouseDown (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
    if MouseLeft then ShowKeyboard2(frmZakaz.Memo1);
end;


procedure ShowKeyboard2 (Ctrl: TWinControl);
var
    Form3: TAForm;
begin
    CurrentCtrl := Ctrl;
    Form3 := TAForm(Ctrl.Parent);
    CurrentCtrl := Ctrl;
    Form2.Top :=  Form3.Top + Ctrl.Top-125;
    Form2.Left := Form3.Left + Ctrl.Left+70;
    Form2.ShowModal;
end;

k245 wrote:

Виртуальная клавиатура симпатичная вышла, хотя я не представляю, как можно на компе без реальной клавиатуры )))
Переключение раскладки - это замена всех заголовков на кнопках с буквами. Так как никакой логики в названии кнопок нет, то нужно выполнить 33 команды вида

Form2.Button1.Caption := 'Й'

Но у меня встречный вопрос: в каких случаях используется эта клавиатура? Кроме того, я бы не рекомендовал любые символы использовать для логина/пароля, особенно для пароля. Есть специальный стандарт ISO, который это регулирует, потому что очень легко спутать 0 и О, 1 и  l и так далее.

Клавиатура используется для ввода логина и пароля на терминале с сенсорным экраном smile

А вот подскажи как сделать подгонять размер на другой форме например frmZakaz  там поле с memo в самом низу у меня никак не получается привязать отдельно на форму клавиатуру со своими размерами вот пытаюсь что не так ?


procedure Form2_bt1_OnClick (Sender: string; Action: string);
begin
        if CurrentCtrl is TdbEdit then
        TdbEdit(CurrentCtrl).Text := TdbEdit(CurrentCtrl).Text + TdbButton(Sender).Caption;
        if CurrentCtrl is TdbMemo then
        TdbMemo(CurrentCtrl).Text := TdbMemo(CurrentCtrl).Text + TdbButton(Sender).Caption;
end;

procedure Form2_btDel_OnClick (Sender: string; var Cancel: boolean);
begin
    if CurrentCtrl is TdbEdit then
        if Length(TdbEdit(CurrentCtrl).Text) > 0 then SetLength(TdbEdit(CurrentCtrl).Text, Length(TdbEdit(CurrentCtrl).Text)-1);
    if CurrentCtrl is TdbMemo then
        if Length(TdbMemo(CurrentCtrl).Text) > 0 then SetLength(TdbMemo(CurrentCtrl).Text, Length(TdbMemo(CurrentCtrl).Text)-1);
end;

procedure ShowKeyboard (Ctrl: TWinControl);
var
    Form: TAForm;
    Form3: TAForm;
begin
    Form := TAForm(Ctrl.Parent);
    Form3 := TAForm(Ctrl.Parent);
    CurrentCtrl := Ctrl;
//Клавиатура на frmLogin
    Form2.Top :=  Form.Top + Ctrl.Top+125;
    Form2.Left := Form.Left + Ctrl.Left-270
//Клавиатура на frmZakaz;
    Form2.Top :=  Form3.Top + Ctrl.Top+225;
    Form2.Left := Form3.Left + Ctrl.Left-170;
    Form2.ShowModal;
end;
В конце скрипта что то не так ?
Только не говори что нужно делать новую клавиатуру smile)))

Ну согласен! Но вот для терминала какого нибудь вообщем я разобрался как сделать клавиатуру. Регистры сделал по типу видимости кнопок вообщем кому интересно вот скрипт

P.S Извиняюсь за токую длину
procedure Form2_OnShow (Sender: TObject; Action: string);
begin
      Form2.Button36.Click;
end;

procedure Form2_Button143_OnClick (Sender: TObject; var Cancel: boolean);
begin
      //Вкл видимость нижнего регистра ENG
      Form2.Button142.Visible :=True; //Й
      Form2.Button111.Visible :=True; //Ц
      Form2.Button112.Visible :=True; //У
      Form2.Button113.Visible :=True; //К
      Form2.Button114.Visible :=True; //Е
      Form2.Button115.Visible :=True; //Н
      Form2.Button116.Visible :=True; //Г
      Form2.Button117.Visible :=True; //Ш
      Form2.Button118.Visible :=True; //Щ
      Form2.Button119.Visible :=True; //З
      Form2.Button120.Visible :=True; //Х
      Form2.Button131.Visible :=True; //Ф
      Form2.Button130.Visible :=True; //Ы
      Form2.Button129.Visible :=True; //В
      Form2.Button128.Visible :=True; //А
      Form2.Button127.Visible :=True; //П
      Form2.Button126.Visible :=True; //Р
      Form2.Button125.Visible :=True; //О
      Form2.Button124.Visible :=True; //Л
      Form2.Button123.Visible :=True; //Д
      Form2.Button122.Visible :=True; //Ж
      Form2.Button121.Visible :=True; //Э
      Form2.Button141.Visible :=True; //Я
      Form2.Button140.Visible :=True; //Ч
      Form2.Button139.Visible :=True; //С
      Form2.Button138.Visible :=True; //М
      Form2.Button137.Visible :=True; //И
      Form2.Button136.Visible :=True; //Т
      Form2.Button135.Visible :=True; //Ь
      Form2.Button134.Visible :=True; //Б
      Form2.Button133.Visible :=True; //Ю
      Form2.Button132.Visible :=True; //Ъ
        //Убираем видимость RUS
      Form2.Button11.Visible :=False; //й
      Form2.Button55.Visible :=False; //ц
      Form2.Button54.Visible :=False; //у
      Form2.Button53.Visible :=False; //к
      Form2.Button52.Visible :=False; //е
      Form2.Button51.Visible :=False; //н
      Form2.Button50.Visible :=False; //г
      Form2.Button49.Visible :=False; //ш
      Form2.Button48.Visible :=False; //щ
      Form2.Button47.Visible :=False; //з
      Form2.Button38.Visible :=False; //х
      Form2.Button24.Visible :=False; //ф
      Form2.Button65.Visible :=False; //ы
      Form2.Button64.Visible :=False; //в
      Form2.Button63.Visible :=False; //а
      Form2.Button62.Visible :=False; //п
      Form2.Button61.Visible :=False; //р
      Form2.Button60.Visible :=False; //о
      Form2.Button59.Visible :=False; //л
      Form2.Button58.Visible :=False; //д
      Form2.Button57.Visible :=False; //ж
      Form2.Button56.Visible :=False; //э
      Form2.Button25.Visible :=False; //я
      Form2.Button74.Visible :=False; //ч
      Form2.Button73.Visible :=False; //с
      Form2.Button72.Visible :=False; //м
      Form2.Button71.Visible :=False; //и
      Form2.Button70.Visible :=False; //т
      Form2.Button69.Visible :=False; //ь
      Form2.Button68.Visible :=False; //б
      Form2.Button67.Visible :=False; //ю
      Form2.Button66.Visible :=False; //ъ


      //Видимость кнопок
      Form2.Button143.Visible :=False;
      Form2.Button110.Visible :=True;
      Form2.Button77.Visible :=False;
      Form2.Button78.Visible :=False;
end;

procedure Form2_Button110_OnClick (Sender: TObject; var Cancel: boolean);
begin
      //Включаем видимость ENG
      Form2.Button11.Visible :=True; //й
      Form2.Button55.Visible :=True; //ц
      Form2.Button54.Visible :=True; //у
      Form2.Button53.Visible :=True; //к
      Form2.Button52.Visible :=True; //е
      Form2.Button51.Visible :=True; //н
      Form2.Button50.Visible :=True; //г
      Form2.Button49.Visible :=True; //ш
      Form2.Button48.Visible :=True; //щ
      Form2.Button47.Visible :=True; //з
      Form2.Button38.Visible :=True; //х
      Form2.Button24.Visible :=True; //ф
      Form2.Button65.Visible :=True; //ы
      Form2.Button64.Visible :=True; //в
      Form2.Button63.Visible :=True; //а
      Form2.Button62.Visible :=True; //п
      Form2.Button61.Visible :=True; //р
      Form2.Button60.Visible :=True; //о
      Form2.Button59.Visible :=True; //л
      Form2.Button58.Visible :=True; //д
      Form2.Button57.Visible :=True; //ж
      Form2.Button56.Visible :=True; //э
      Form2.Button25.Visible :=True; //я
      Form2.Button74.Visible :=True; //ч
      Form2.Button73.Visible :=True; //с
      Form2.Button72.Visible :=True; //м
      Form2.Button71.Visible :=True; //и
      Form2.Button70.Visible :=True; //т
      Form2.Button69.Visible :=True; //ь
      Form2.Button68.Visible :=True; //б
      Form2.Button67.Visible :=True; //ю
      Form2.Button66.Visible :=True; //ъ
        //Отключаем видимость верхнего регистра RUS
      Form2.Button142.Visible :=False; //Й
      Form2.Button111.Visible :=False; //Ц
      Form2.Button112.Visible :=False; //У
      Form2.Button113.Visible :=False; //К
      Form2.Button114.Visible :=False; //Е
      Form2.Button115.Visible :=False; //Н
      Form2.Button116.Visible :=False; //Г
      Form2.Button117.Visible :=False; //Ш
      Form2.Button118.Visible :=False; //Щ
      Form2.Button119.Visible :=False; //З
      Form2.Button120.Visible :=False; //Х
      Form2.Button131.Visible :=False; //Ф
      Form2.Button130.Visible :=False; //Ы
      Form2.Button129.Visible :=False; //В
      Form2.Button128.Visible :=False; //А
      Form2.Button127.Visible :=False; //П
      Form2.Button126.Visible :=False; //Р
      Form2.Button125.Visible :=False; //О
      Form2.Button124.Visible :=False; //Л
      Form2.Button123.Visible :=False; //Д
      Form2.Button122.Visible :=False; //Ж
      Form2.Button121.Visible :=False; //Э
      Form2.Button141.Visible :=False; //Я
      Form2.Button140.Visible :=False; //Ч
      Form2.Button139.Visible :=False; //С
      Form2.Button138.Visible :=False; //М
      Form2.Button137.Visible :=False; //И
      Form2.Button136.Visible :=False; //Т
      Form2.Button135.Visible :=False; //Ь
      Form2.Button134.Visible :=False; //Б
      Form2.Button133.Visible :=False; //Ю
      Form2.Button132.Visible :=False; //Ъ


      //Видимость кнопок
      Form2.Button143.Visible :=True;
      Form2.Button110.Visible :=False;
      Form2.Button77.Visible :=False;
      Form2.Button78.Visible :=False;
end;

procedure Form2_Button78_OnClick (Sender: TObject; var Cancel: boolean);
begin
     //Вкл видимость верхнего регистра ENG
      Form2.Button79.Visible :=True; //q
      Form2.Button90.Visible :=True; //w
      Form2.Button89.Visible :=True; //e
      Form2.Button88.Visible :=True; //r
      Form2.Button87.Visible :=True; //t
      Form2.Button86.Visible :=True; //y
      Form2.Button85.Visible :=True; //u
      Form2.Button84.Visible :=True; //i
      Form2.Button83.Visible :=True; //o
      Form2.Button82.Visible :=True; //p
      Form2.Button27.Visible :=True; //[
      Form2.Button99.Visible :=True; //a
      Form2.Button98.Visible :=True; //s
      Form2.Button97.Visible :=True; //d
      Form2.Button96.Visible :=True; //f
      Form2.Button95.Visible :=True; //g
      Form2.Button94.Visible :=True; //h
      Form2.Button93.Visible :=True; //j
      Form2.Button92.Visible :=True; //k
      Form2.Button91.Visible :=True; //l
      Form2.Button81.Visible :=True; //;
      Form2.Button80.Visible :=True; //'
      Form2.Button109.Visible :=True; //z
      Form2.Button108.Visible :=True; //x
      Form2.Button107.Visible :=True; //c
      Form2.Button106.Visible :=True; //v
      Form2.Button105.Visible :=True; //b
      Form2.Button104.Visible :=True; //n
      Form2.Button103.Visible :=True; //m
      Form2.Button102.Visible :=True; //,
      Form2.Button101.Visible :=True; //.
      Form2.Button100.Visible :=True; ///

   //Включаем видимость ENG   РЕАЛЬНАЯ РАСКЛАДКА
      Form2.Button21.Visible :=False; //Q
      Form2.Button12.Visible :=False; //W
      Form2.Button19.Visible :=False; //E
      Form2.Button18.Visible :=False; //R
      Form2.Button13.Visible :=False; //T
      Form2.Button14.Visible :=False; //Y
      Form2.Button15.Visible :=False; //U
      Form2.Button17.Visible :=False; //I
      Form2.Button16.Visible :=False; //O
      Form2.Button20.Visible :=False; //P
      Form2.Button27.Visible :=False; //[
      Form2.Button27.Visible :=True; //]
      Form2.Button75.Visible :=False; //A
      Form2.Button35.Visible :=False; //S
      Form2.Button34.Visible :=False; //D
      Form2.Button33.Visible :=False; //F
      Form2.Button32.Visible :=False; //G
      Form2.Button31.Visible :=False; //H
      Form2.Button30.Visible :=False; //J
      Form2.Button29.Visible :=False; //K
      Form2.Button28.Visible :=False; //L
      Form2.Button23.Visible :=False; //;
      Form2.Button22.Visible :=False; //'
      Form2.Button76.Visible :=False; //Z
      Form2.Button45.Visible :=False; //X
      Form2.Button44.Visible :=False; //C
      Form2.Button43.Visible :=False; //V
      Form2.Button42.Visible :=False; //B
      Form2.Button46.Visible :=False; //N
      Form2.Button41.Visible :=False; //M
      Form2.Button40.Visible :=False; //,
      Form2.Button39.Visible :=False; //.
      Form2.Button100.Visible :=True; ///

      //Видимость кнопок
      Form2.Button77.Visible :=True;
      Form2.Button78.Visible :=False;

end;
//Регистр Up
procedure Form2_Button77_OnClick (Sender: TObject; var Cancel: boolean);
begin
      //DOWN ENG
//Включаем видимость ENG   РЕАЛЬНАЯ РАСКЛАДКА
      Form2.Button21.Visible :=True; //Q
      Form2.Button12.Visible :=True; //W
      Form2.Button19.Visible :=True; //E
      Form2.Button18.Visible :=True; //R
      Form2.Button13.Visible :=True; //T
      Form2.Button14.Visible :=True; //Y
      Form2.Button15.Visible :=True; //U
      Form2.Button17.Visible :=True; //I
      Form2.Button16.Visible :=True; //O
      Form2.Button20.Visible :=True; //P
      Form2.Button27.Visible :=True; //[
      Form2.Button38.Visible :=True; //]
      Form2.Button75.Visible :=True; //A
      Form2.Button35.Visible :=True; //S
      Form2.Button34.Visible :=True; //D
      Form2.Button33.Visible :=True; //F
      Form2.Button32.Visible :=True; //G
      Form2.Button31.Visible :=True; //H
      Form2.Button30.Visible :=True; //J
      Form2.Button29.Visible :=True; //K
      Form2.Button28.Visible :=True; //L
      Form2.Button23.Visible :=True; //;
      Form2.Button22.Visible :=True; //'
      Form2.Button76.Visible :=True; //Z
      Form2.Button45.Visible :=True; //X
      Form2.Button44.Visible :=True; //C
      Form2.Button43.Visible :=True; //V
      Form2.Button42.Visible :=True; //B
      Form2.Button46.Visible :=True; //N
      Form2.Button41.Visible :=True; //M
      Form2.Button40.Visible :=True; //,
      Form2.Button39.Visible :=True; //.
      Form2.Button100.Visible :=True; ///

      //Откл видимость нижнего регистра ENG
      Form2.Button79.Visible :=False; //q
      Form2.Button90.Visible :=False; //w
      Form2.Button89.Visible :=False; //e
      Form2.Button88.Visible :=False; //r
      Form2.Button87.Visible :=False; //t
      Form2.Button86.Visible :=False; //y
      Form2.Button85.Visible :=False; //u
      Form2.Button84.Visible :=False; //i
      Form2.Button83.Visible :=False; //o
      Form2.Button82.Visible :=False; //p
      Form2.Button27.Visible :=True; //[
      Form2.Button100.Visible :=False; ///
      Form2.Button99.Visible :=False; //a
      Form2.Button98.Visible :=False; //s
      Form2.Button97.Visible :=False; //d
      Form2.Button96.Visible :=False; //f
      Form2.Button95.Visible :=False; //g
      Form2.Button94.Visible :=False; //h
      Form2.Button93.Visible :=False; //j
      Form2.Button92.Visible :=False; //k
      Form2.Button91.Visible :=False; //l
      Form2.Button81.Visible :=False; //;
      Form2.Button80.Visible :=False; //'
      Form2.Button109.Visible :=False; //z
      Form2.Button108.Visible :=False; //x
      Form2.Button107.Visible :=False; //c
      Form2.Button106.Visible :=False; //v
      Form2.Button105.Visible :=False; //b
      Form2.Button104.Visible :=False; //n
      Form2.Button103.Visible :=False; //m
      Form2.Button102.Visible :=False; //,
      Form2.Button101.Visible :=False; //.
      Form2.Button26.Visible :=True; ///
      //Убираем видимость RUS
      Form2.Button11.Visible :=False; //й
      Form2.Button55.Visible :=False; //ц
      Form2.Button54.Visible :=False; //у
      Form2.Button53.Visible :=False; //к
      Form2.Button52.Visible :=False; //е
      Form2.Button51.Visible :=False; //н
      Form2.Button50.Visible :=False; //г
      Form2.Button49.Visible :=False; //ш
      Form2.Button48.Visible :=False; //щ
      Form2.Button47.Visible :=False; //з
      Form2.Button38.Visible :=False; //х
      Form2.Button24.Visible :=False; //ф
      Form2.Button65.Visible :=False; //ы
      Form2.Button64.Visible :=False; //в
      Form2.Button63.Visible :=False; //а
      Form2.Button62.Visible :=False; //п
      Form2.Button61.Visible :=False; //р
      Form2.Button60.Visible :=False; //о
      Form2.Button59.Visible :=False; //л
      Form2.Button58.Visible :=False; //д
      Form2.Button57.Visible :=False; //ж
      Form2.Button56.Visible :=False; //э
      Form2.Button25.Visible :=False; //я
      Form2.Button74.Visible :=False; //ч
      Form2.Button73.Visible :=False; //с
      Form2.Button72.Visible :=False; //м
      Form2.Button71.Visible :=False; //и
      Form2.Button70.Visible :=False; //т
      Form2.Button69.Visible :=False; //ь
      Form2.Button68.Visible :=False; //б
      Form2.Button67.Visible :=False; //ю
      Form2.Button66.Visible :=False; //ъ



      //Видимость кнопок
      Form2.Button77.Visible :=False;
      Form2.Button78.Visible :=True;


end;
//ENG
procedure Form2_Button37_OnClick (Sender: TObject; var Cancel: boolean);
begin
      //Вкл видимость верхнего регистра ENG
      Form2.Button79.Visible :=True; //q
      Form2.Button90.Visible :=True; //w
      Form2.Button89.Visible :=True; //e
      Form2.Button88.Visible :=True; //r
      Form2.Button87.Visible :=True; //t
      Form2.Button86.Visible :=True; //y
      Form2.Button85.Visible :=True; //u
      Form2.Button84.Visible :=True; //i
      Form2.Button83.Visible :=True; //o
      Form2.Button82.Visible :=True; //p
      Form2.Button27.Visible :=True; ///
      Form2.Button99.Visible :=True; //a
      Form2.Button98.Visible :=True; //s
      Form2.Button97.Visible :=True; //d
      Form2.Button96.Visible :=True; //f
      Form2.Button95.Visible :=True; //g
      Form2.Button94.Visible :=True; //h
      Form2.Button93.Visible :=True; //j
      Form2.Button92.Visible :=True; //k
      Form2.Button91.Visible :=True; //l
      Form2.Button81.Visible :=True; //;
      Form2.Button80.Visible :=True; //'
      Form2.Button109.Visible :=True; //z
      Form2.Button108.Visible :=True; //x
      Form2.Button107.Visible :=True; //c
      Form2.Button106.Visible :=True; //v
      Form2.Button105.Visible :=True; //b
      Form2.Button104.Visible :=True; //n
      Form2.Button103.Visible :=True; //m
      Form2.Button102.Visible :=True; //,
      Form2.Button101.Visible :=True; //.
      Form2.Button26.Visible :=True; ///
      //Убираем видимость RUS
      Form2.Button11.Visible :=False; //й
      Form2.Button55.Visible :=False; //ц
      Form2.Button54.Visible :=False; //у
      Form2.Button53.Visible :=False; //к
      Form2.Button52.Visible :=False; //е
      Form2.Button51.Visible :=False; //н
      Form2.Button50.Visible :=False; //г
      Form2.Button49.Visible :=False; //ш
      Form2.Button48.Visible :=False; //щ
      Form2.Button47.Visible :=False; //з
      Form2.Button38.Visible :=False; //х
      Form2.Button24.Visible :=False; //ф
      Form2.Button65.Visible :=False; //ы
      Form2.Button64.Visible :=False; //в
      Form2.Button63.Visible :=False; //а
      Form2.Button62.Visible :=False; //п
      Form2.Button61.Visible :=False; //р
      Form2.Button60.Visible :=False; //о
      Form2.Button59.Visible :=False; //л
      Form2.Button58.Visible :=False; //д
      Form2.Button57.Visible :=False; //ж
      Form2.Button56.Visible :=False; //э
      Form2.Button25.Visible :=False; //я
      Form2.Button74.Visible :=False; //ч
      Form2.Button73.Visible :=False; //с
      Form2.Button72.Visible :=False; //м
      Form2.Button71.Visible :=False; //и
      Form2.Button70.Visible :=False; //т
      Form2.Button69.Visible :=False; //ь
      Form2.Button68.Visible :=False; //б
      Form2.Button67.Visible :=False; //ю
      Form2.Button66.Visible :=False; //ъ
      //Отключаем видимость верхнего регистра RUS
      Form2.Button142.Visible :=False; //Й
      Form2.Button111.Visible :=False; //Ц
      Form2.Button112.Visible :=False; //У
      Form2.Button113.Visible :=False; //К
      Form2.Button114.Visible :=False; //Е
      Form2.Button115.Visible :=False; //Н
      Form2.Button116.Visible :=False; //Г
      Form2.Button117.Visible :=False; //Ш
      Form2.Button118.Visible :=False; //Щ
      Form2.Button119.Visible :=False; //З
      Form2.Button120.Visible :=False; //Х
      Form2.Button131.Visible :=False; //Ф
      Form2.Button130.Visible :=False; //Ы
      Form2.Button129.Visible :=False; //В
      Form2.Button128.Visible :=False; //А
      Form2.Button127.Visible :=False; //П
      Form2.Button126.Visible :=False; //Р
      Form2.Button125.Visible :=False; //О
      Form2.Button124.Visible :=False; //Л
      Form2.Button123.Visible :=False; //Д
      Form2.Button122.Visible :=False; //Ж
      Form2.Button121.Visible :=False; //Э
      Form2.Button141.Visible :=False; //Я
      Form2.Button140.Visible :=False; //Ч
      Form2.Button139.Visible :=False; //С
      Form2.Button138.Visible :=False; //М
      Form2.Button137.Visible :=False; //И
      Form2.Button136.Visible :=False; //Т
      Form2.Button135.Visible :=False; //Ь
      Form2.Button134.Visible :=False; //Б
      Form2.Button133.Visible :=False; //Ю
      Form2.Button132.Visible :=False; //Ъ

      //Откл кнопки
      Form2.Button37.Enabled :=False;
      Form2.Button36.Enabled :=True;
      Form2.Button110.Visible :=False;
      Form2.Button143.Visible :=False;
      Form2.Button78.Visible :=True;
      Form2.Button77.Visible :=True;

end;
//RUS
procedure Form2_Button36_OnClick (Sender: TObject; var Cancel: boolean);
begin

      //Включаем видимость ENG
      Form2.Button11.Visible :=True; //й
      Form2.Button55.Visible :=True; //ц
      Form2.Button54.Visible :=True; //у
      Form2.Button53.Visible :=True; //к
      Form2.Button52.Visible :=True; //е
      Form2.Button51.Visible :=True; //н
      Form2.Button50.Visible :=True; //г
      Form2.Button49.Visible :=True; //ш
      Form2.Button48.Visible :=True; //щ
      Form2.Button47.Visible :=True; //з
      Form2.Button38.Visible :=True; //х
      Form2.Button24.Visible :=True; //ф
      Form2.Button65.Visible :=True; //ы
      Form2.Button64.Visible :=True; //в
      Form2.Button63.Visible :=True; //а
      Form2.Button62.Visible :=True; //п
      Form2.Button61.Visible :=True; //р
      Form2.Button60.Visible :=True; //о
      Form2.Button59.Visible :=True; //л
      Form2.Button58.Visible :=True; //д
      Form2.Button57.Visible :=True; //ж
      Form2.Button56.Visible :=True; //э
      Form2.Button25.Visible :=True; //я
      Form2.Button74.Visible :=True; //ч
      Form2.Button73.Visible :=True; //с
      Form2.Button72.Visible :=True; //м
      Form2.Button71.Visible :=True; //и
      Form2.Button70.Visible :=True; //т
      Form2.Button69.Visible :=True; //ь
      Form2.Button68.Visible :=True; //б
      Form2.Button67.Visible :=True; //ю
      Form2.Button66.Visible :=True; //ъ
       //Откл видимость нижнего регистра ENG
      Form2.Button79.Visible :=False; //q
      Form2.Button90.Visible :=False; //w
      Form2.Button89.Visible :=False; //e
      Form2.Button88.Visible :=False; //r
      Form2.Button87.Visible :=False; //t
      Form2.Button86.Visible :=False; //y
      Form2.Button85.Visible :=False; //u
      Form2.Button84.Visible :=False; //i
      Form2.Button83.Visible :=False; //o
      Form2.Button82.Visible :=False; //p
      Form2.Button27.Visible :=False; //[
      Form2.Button100.Visible :=False; ///
      Form2.Button99.Visible :=False; //a
      Form2.Button98.Visible :=False; //s
      Form2.Button97.Visible :=False; //d
      Form2.Button96.Visible :=False; //f
      Form2.Button95.Visible :=False; //g
      Form2.Button94.Visible :=False; //h
      Form2.Button93.Visible :=False; //j
      Form2.Button92.Visible :=False; //k
      Form2.Button91.Visible :=False; //l
      Form2.Button81.Visible :=False; //;
      Form2.Button80.Visible :=False; //'
      Form2.Button109.Visible :=False; //z
      Form2.Button108.Visible :=False; //x
      Form2.Button107.Visible :=False; //c
      Form2.Button106.Visible :=False; //v
      Form2.Button105.Visible :=False; //b
      Form2.Button104.Visible :=False; //n
      Form2.Button103.Visible :=False; //m
      Form2.Button102.Visible :=False; //,
      Form2.Button101.Visible :=False; //.
      Form2.Button26.Visible :=False; ///


      //Откл кнопки
      Form2.Button36.Enabled :=False;
      Form2.Button37.Enabled :=True;
      Form2.Button77.Visible :=False;
      Form2.Button78.Visible :=False;
      Form2.Button110.Visible :=True;
      Form2.Button143.Visible :=True;


end;


procedure Form2_bt1_OnClick (Sender: string; Action: string);
begin
        if CurrentCtrl is TdbEdit then
        TdbEdit(CurrentCtrl).Text := TdbEdit(CurrentCtrl).Text + TdbButton(Sender).Caption;
end;

procedure Form2_btDel_OnClick (Sender: string; var Cancel: boolean);
begin
    if CurrentCtrl is TdbEdit then
        if Length(TdbEdit(CurrentCtrl).Text) > 0 then SetLength(TdbEdit(CurrentCtrl).Text, Length(TdbEdit(CurrentCtrl).Text)-1);
end;

procedure frmLogin_Edit2_OnMouseDown (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
if MouseLeft then ShowKeyboard(frmLogin.Edit2);
end;




procedure frmLogin_Edit1_OnMouseDown (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
    if MouseLeft then ShowKeyboard(frmLogin.Edit1);
end;

procedure Form2_btOk_OnClick (Sender: string; Action: string);
begin
    Form2.Close;
end;
                   
procedure ShowKeyboard (Ctrl: TWinControl);
var
    Form: TAForm;

begin
    Form := TAForm(Ctrl.Parent);
    CurrentCtrl := Ctrl;
    Form2.Top :=  Form.Top + Ctrl.Top+125;
   Form2.Left := Form.Left + Ctrl.Left-270;
    Form2.ShowModal;
end;