TAForm - это класс форм, которые создаются в визуальном редакторе. У класса есть конструктор Create, что предполагает возможность программного создания таких форм.


procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
  CreateForm;
end;

procedure CreateForm;
var
  Form:TAForm;
begin
  Form := TAForm.Create(Application);
  Form.ShowModal;
end;

begin
end.

При компиляции ошибки нет, но стоит нажать кнопку для создания формы, получаем ошибку:


http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=8893&download=0

652

(16 replies, posted in Russian)

NickB wrote:

Добрый день,

а можно сделать автозаполнение в МЕМО и через запятую, то есть к примеру набираешь "ро" заполняется Россия ставлю запятую набираю "пак" заполняется Пакистан и тд ,чтоб оно выглядело вот так (Россия, Пакистан, Китай) ?

я соединил МЕМО с несколькими Edit  полями, добивив слеш получается Россия/Пакистан/Китай, но если я ничего не заполняю то программа выдает в пустом МЕМО вот так (///)

Заранее благодарен

Возможно всё. На невозможное нужно чуть больше времени. (с)


Но вопрос: а нужно ли? Вы хотите сделать текстовый редактор с автозавершением ввода? Это возможно, хотя и весьма сложно, но что-то мне подсказывает, что есть более простое решение вашей бизнес-задачи. В чем заключается цель данных манипуляций?

Столкнулся проблемой: не у всех компонентов доступно свойство StyleElements. В частности, это TdbStringGridEx (табличная сетка). Видимо из-за этого при программном создании компонента невозможно задать для него стиль.  Очень странно и грустно, что по умолчанию он создётся без стиля. Кто-нибудь знает, как программно создавать "стильные" таблицы?


http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=8889&download=0

654

(11 replies, posted in General)

I ran into the opposite problem: not all components have the StyleElements property available, apparently because of this, when creating a component programmatically, it is impossible to set a style for it. Specifically, it's TdbStringGridEx (Table Grid). It is very strange and sad that by default it is created without style. Does anyone know how to programmatically create stylish tables?


http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=8886&download=0

655

(11 replies, posted in General)

StateOne wrote:

Hello K245;;;
is there way to connect mvd with sql server like we mvd connected with mysql

If you meant MS SQL server, then the answer is here:  http://myvisualdatabase.com/forum/viewtopic.php?id=7098

656

(11 replies, posted in General)

I have a couple of articles on this topic. The first one that StateOne pointed out talks about changing styles from the application using a script. The following section explains how to add button images to a theme: https://k245.ru/mvdb/effekt-babochki.html

ПРЕДЛОЖЕНИЕ
ClassExplorer. Справочная система разработчика
https://k245.ru/wp-content/uploads/2022/07/Entsiklopediya_1_1-1024x656.png
БЕСПЛАТНО


Накапливайте ваши знания по объектной модели, систематизируйте информацию по готовым решениям.
Подходит для разработчиков My Visual Database и всех других систем, использующих принципы объектно-ориентированного программирования.


Программа позволяет хранить данные о

  • Классах

  • Типах

  • Свойствах

  • Методах

  • Событиях

  • Функциях

  • Переменных

  • Типовых задач


Скачать: https://drive.google.com/file/d/1ADDnkK … sp=sharing
Обсудить: https://k245.ru/mvdb/effekt-babochki.html

Эффект бабочки


https://k245.ru/wp-content/uploads/2022/07/Pavlinij-glaz.jpg


Завершив работу над первой версией программы "ClassExplorer", я решил немного усовершенствовать её: разнести программный код по отдельным модулям, а также добавить механизм управления стилями. Но эти казалось бы небольшие изменения создали кучу хлопот.


Читать:  https://k245.ru/mvdb/effekt-babochki.html

Нашел на форуме, но не проверял:


Работа с SQLite, подключение к MySQL

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
    MySQL: TMyConnection;
    MySQLQuery: TMyQuery;
begin
    MySQL := TMyConnection.Create(Form1);
    MySQLQuery := TMyQuery.Create(nil);
    try
            MySQL.Options.UseUnicode := True;
            MySQL.Server := '127.0.0.1'; // ip address of MySQL server
            MySQL.Port := 3306;
            MySQL.Username := 'login';
            MySQL.Password := 'password';
            MySQL.Database := 'databasename';
            MySQL.LoginPromt := False;
        
            try
                MySQL.Connect;
            except
                ShowMessage('Can''t connect to database.');
            end;

            if MySQL.Connected then
            begin
                // SQL query
                MySQL.ExecSQL('INSERT INTO test (field1, field2) VALUES ("value1", "value2")');


                // how to get data
                MySQLQuery.Connection := MySQL;
                MySQLQuery.SQL.Text := 'SELECT fieldname FROM tablename';
                MySQLQuery.Execute;

                while not MySQLQuery.EOF do
                begin
                    Form1.Memo1.Lines.Add( MySQLQuery.FieldByName('fieldname').AsString );
                    MySQLQuery.Next;
                end;


                MySQL.Disconnect;
            end;

    finally
        MySQLQuery.Free;
        MySQL.Free;
    end;
end;

То есть тут все наоборот: проект настроен на SQLite, но работает с базой MySQL. Полагаю, можно и с несколькими базами работать одновременно, создав для каждой свои экземпляры компонентов доступа.

660

(11 replies, posted in General)

procedure Grid_AddFrame( AGrid: TdbStringGridEx; );
// add frame for table view
// as it turned out, if you just change the Border property, then this causes an unpleasant flicker,
// from which even double buffering does not save; so add a frame shape
var
  tmpShape: TShape;
begin
  // create a frame
  tmpShape := TShape.Create(TComponent(AGrid).Owner);
  // name consists of class prefix, personal name, and table view name
  tmpShape.Name := T_SHAPE+GRID_FRAME_NAME+'_'+DeleteClassName(AGrid.Name);
  tmpShape.Parent := AGrid.Parent;
  tmpShape.Top := AGrid.Top;
  tmpShape.Left := AGrid.Left;
  tmpShape.Width := AGrid.Width;
  tmpShape.Height := AGrid.Height;
  tmpShape.Shape := stRectangle;
  // set border color
  tmpShape.Pen.Color := AGrid.Font.Color;
  tmpShape.Pen.Width := GRID_FRAME_WIDTH;
  // set shape color
  tmpShape.Brush.Color := AGrid.Font.Color;
  tmpShape.Anchors := akTop+akLeft+akBottom+akRight;
  // adjust the size and appearance of the table view
  AGrid.Left := AGrid.Left + GRID_FRAME_WIDTH;
  AGrid.Top := AGrid.Top + GRID_FRAME_WIDTH;
  AGrid.Width := AGrid.Width - 2*GRID_FRAME_WIDTH;
  AGrid.Height := AGrid.Height - 2*GRID_FRAME_WIDTH;
  AGrid.BorderStyle := bsNone;
end;

661

(11 replies, posted in General)

If I understand the style mechanism correctly, then the answer is "no". But I solved this problem in a different way: I placed the TShape component on the form, and set the color I needed through the Brush.Color and Pen.Color properties.

chartcatuser wrote:

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

Возможно создать ещё один экземпляр соединения с другой базой. Но как его использовать для выполнения запроса, мне не понятно.... Может, у вас получится? smile  С разными базами (схемами) на одном сервере теоретически можно работать (перед именем таблицы можно указать имя схемы) , а вот чтобы с разными серверами...


А вот SQLite работает с разными базами, но лично мне этим заниматься не приходилось, но задумка одна имеется...

chartcatuser wrote:
k245 wrote:
chartcatuser wrote:

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

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

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

TdbEdit хранит набор символов (тип String), поэтому при нажатии на клавиатуре добавляется ещё один символ (TChar).


TdbDateTimePicker хранит дату (тип TDateTime, по сути Float - число с плавающей точкой). Что вы хотите добавить туда с клавиатуры, которая выдаёт символы?  smile


А если серьёзно, то у TdbDateTimePicker нет удобного посимвольного управления строкой ввода данных. И вообще мне кажется, что вы движетесь не в том направлении. Попробуйте передавать не символы, а сообщения о нажатии клавиш (см. SendMessage() ) - пусть компоненты отрабатывают привычную им логику обработки данных.

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

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


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

chartcatuser wrote:

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

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

Ошибка в проектировании базы данных.


Если вам нужно преобразовывать интервал даты в индекс, то структура таблицы с периодами должна быть такая:

Period
    PeriodFrom - integer
    PeriodTo - integer

Тогда установка периода выглядит так:

tmpPeriod := Калькулятор.DateTimePicker2.DateTime - Калькулятор.DateTimePicker1.DateTime +1; 
Калькулятор.ComboBox3.dtItemID =  SQLExecute( 'SELECT id FROM Period WHERE PeriodFrom >= '+tmpPeriod+' and PeriodTo <= '+tmpPeriod );

Не забудьте в свойствах ComboBox3 указать


FieldName = {PeriodFrom}-{PeriodTo}
chartcatuser wrote:
k245 wrote:
chartcatuser wrote:

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

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

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

У вас другая проблема: вы не можете сформулировать правильно вопрос.


В процедуре  ChangeValues1() у вас дата ставится только, если передаваемый параметр = True, если передать False, то ваш скрипт выдаст ошибку. Вы с бизнес-логикой сначала разберитесь, а потом уже скрипты объединяйте.


Если же нужен скрипт без параметра, который ставит дату и присваивает значение полю isSmoke, то вот он:

procedure ChangeValues1;
var
  i: integer;
begin
  for i := 0 to Form1.GridEmployees.RowCount-1 do
  begin
    if Form1.GridEmployees.Selected[i] then
    begin
      SQLExecute('UPDATE employees SET DateOfBirth = '+Form1.dtDateOfBirth.sqlDate +', isSmoke = 1  WHERE id='+IntToStr(Form1.GridEmployees.dbIndexToID(i)));
    end;
  end;
  Form1.GridEmployees.dbUpdate;
end;

Уважаемые форумчане!

К сожалению, содержимое ветки  Database application. Ready to use progects  давно не соответствует своему названию: вместо готовых к использованию проектов там задают вопросы, на которые почти никто не отвечает. Поэтому я решил исправить ситуацию.


В данной теме прошу размещать сообщения двух видов:

  • Спрос

  • Предложение


В каждом сообщении прошу размещать:

  • Тип сообщения (спрос/предложение)

  • Название программы (для предложения) + краткое описание (одним предложением)

  • Скриншот (для предложения)

  • Стоимость в рублях (для предложения) или бюджет (для спроса). Или волшебное слово "бесплатно" smile

  • Описание ключевых особенностей (один абзац)

  • Ссылка для скачивания (для предложения)

  • Ссылка для обсуждения


Во пример такого сообщения:


ПРЕДЛОЖЕНИЕ
Equipment Inventory. Средство инвентаризации и учета.
http://myvisualdatabase.com/database_examples/inventory1.png
БЕСПЛАТНО
Управляйте своим компьютером, офисом или производственными активами с помощью этой базы данных.
Скачать: http://myvisualdatabase.com/database_ex … entory.zip
Обсудить: http://myvisualdatabase.com/forum/viewtopic.php?id=1493

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Комментарии и обсуждения проектов и запросов на разработку прошу вести в отдельной теме. smile
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I see no reason to duplicate this topic in the English thread, so I invite everyone who uses English (or any other language that Google Translate works with smile) to communicate on this forum to post their posts here.

chartcatuser wrote:

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

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

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

Form2.Button1.Caption := 'Й'

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

671

(16 replies, posted in Russian)

NickB wrote:

Вызывать в главной секции приложения для форм, в которых нужно поддерживать AutoScroll = True
begin
  AddScrollBox( Form1 );
end.

Я код скопировал, в скрипт но что то не сработало ? По всей видимости не правильно что то сделал ?

на всех формах выставил AutoScroll = True

672

(16 replies, posted in Russian)

Да я хотел пошутить над премиями за ковид, но вижу, что всё очень серьёзно...

673

(47 replies, posted in Script)

chartcatuser wrote:

Does anyone know how to increase the tick on the checkbox ?? And then in the editor it shows a large one, but in fact, when you run the program, it is small
datetimepiker

It is impossible to do this, since a system component is used to display the checker. Neither the size nor the color can be changed.

674

(16 replies, posted in Russian)

Подтверждаю, установка любого стиля делает свойство формы AutoScroll бесполезным. Причину этого явления назвать не могу, но могу предложить костыль - процедуру, которая добавляет на форму компонент TScrollBox и переносит на него все другие компоненты формы. TScrollBox в сочетании с темой отображается корректно.

procedure AddScrollBox( AForm:TAForm;);
var
  SB:TScrollBox;
  i: integer;
begin
  SB := TScrollBox.Create(AForm);
  SB.Parent := AForm;
  SB.Align := alClient;
  for i := AForm.controlCount - 1 downto 0 do
  begin
    if AForm.Controls[i] <> SB then
      AForm.Controls[i].Parent := SB;
  end;
end;

Вызывать в главной секции приложения для форм, в которых нужно поддерживать AutoScroll = True


begin
  AddScrollBox( Form1 );
end.

http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&amp;item=8836&amp;download=0


NickB, вы шокируете своим проектом. Премия за ковид-19 - это бухгалтерия Цитадели Зла? )))

675

(16 replies, posted in Russian)

Пожалуйста, загрузите простой пример, в котором теряется свойство AutoScroll при установке стиля