Обработчик нужно подключить, тоже скриптом:
begin
frmMain.OnCloseQuery := @frmMain_OnCloseQuery;
end.
My Visual Database → Posts by k245
Обработчик нужно подключить, тоже скриптом:
begin
frmMain.OnCloseQuery := @frmMain_OnCloseQuery;
end.
А такой
procedure frmMain_OnCloseQuery (Sender: TObject; var CanClose: Boolean);
процедуры нет в свойствах формы версии 5,5...
Не все существующие обработчики событий присутствуют в редакторе свойств компонент.
Данную процедуру нужно добавить не через свойства формы, а непосредственно в редакторе скриптов.
Первый момент:
procedure frmAddNote_Button4_OnClick (Sender: TObject; var Cancel: boolean);
begin
//Проверка на заполнение полей
if (frmAddNote.Edit1.Text='') then
begin
ShowHint(frmAddNote.Edit1, 'Обязательное поле');
Cancel := False;
end
else
//Сохранение
frmAddNote.Button1.Click;
end;
Для предотвращения закрытия главной формы нужно использовать другой обработчик, добавьте этот код в скрипт:
// обработчик запроса на закрытие формы
procedure frmMain_OnCloseQuery (Sender: TObject; var CanClose: Boolean);
begin
if MessageBox('Вы действительно хотите выйти?','Подтверждение',MB_YESNO+MB_ICONQUESTION) = IDNO then
CanClose:= False;
end;
Здравствуйте.
Меняю платформу с windows на Macc OS. Не хочу заморачиваться сторонним софтом, наподобии виртуальных машин с виндой и т.д.
Хочу перенести всю базу программы (а в ней данные за несколько лет) в интернет.
Подскажите пожалуйста, Если есть возможность то с инструкциями по пунктам, как это можно осуществить?
Попробуйте Wine. На MacOS не проверял, но под линуксом MVD нормально работает через эту прослойку.
Все формы проекта создаются при запуске автоматически, в одном экземпляре. Также автоматически они разрушаются при завершении приложения. В процессе работы приложения меняется только видимость форм.
Make this change in your project:
procedure Form1_TableGrid1_OnCellClick (Sender: TObject; ACol, ARow: Integer);
begin
ShowMessage(Form1.TableGrid1.Cells(1,ARow));
end;
You can change the transparency of the main form when opening child ones. Configure the button to open the window, and then add the code:
procedure MainForm_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
MainForm.AlphaBlendValue := 125;
MainForm.AlphaBlend := true;
end;
procedure MainForm_Button1_OnAfterClick (Sender: TObject);
begin
MainForm.AlphaBlend := false;
end;
Спасибо Dmitry.
А как тогда можно определить номер первой (или последней)
не выделенной строки на текущей странице в TableGrid ?
Номер первой отображаемой строки находится в свойстве VertScrollBar.Position, нумерация с нуля.
ошибка, может я не правильно сохраняю документ?
procedure FrmHelp_RichEdit1_OnChange (Sender: TObject); begin SQLEXecute('UPDATE help SET richDescription= "'+FrmHelp.RichEdit1.TextRTF+'" WHERE id=' + FrmHelp.TreeView1.sqlValue); end;
Какого типа поле "help.richDescription" ? Судя по вашему запросу - TEXT. В этом случае вам понадобится экранирование служебных символов, содержащихся в свойстве TRichEdit.TextRTF - функция Escape_special_characters()
Если тип поля FILE (BLOB), то вам понадобится ваше же решение, через Form1.SQLConnection.Execute(sSQL, Params); - http://myvisualdatabase.com/forum/viewt … 080#p32080
Но, как мне кажется, проще использовать для сохранения стандартные возможности MVD - компонент TRichEdit и правильно настроенную кнопку "СОХРАНИТЬ"
нужна возможнасть создание собственных гиперссылок на компоненты в RichEdit
вижу это так
procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean); begin Form1.RichEdit1.HiperLinkWrite(Form1.RichEdit1.GetSelText,Form1.TreeView.SelectedRow:=1;) end;
где
1.Текст к которому присваевается ссылка
2.Действие ссылки
Тогда уж лучше добавить обработчик на событие
Form1_RichEdit1_OnHyperLinkClick( Sender: TObject; Link: string )
в котором можно делать то, что нужно.
Или что-то подобное уже реализовано?
что за Results?
Экземпляр TDataSet. Это для примера.
Важно:
1. Очистка параметров:
Form1.frxReport.Variables.Clear;
2. Добавление параметра и его значения:
Form1.frxReport.Variables['Name'] := '''Value''';
как передать компонент поиска скриптом?
Form1.frxReport.Variables.Clear;
// группа параметров
Form1.frxReport.Variables[' ' + 'Seller'] := Null;
// параметры и значения
Form1.frxReport.Variables['Name'] := ''''+ Results.FieldByName('Name').AsString +'''';
Form1.frxReport.Variables['AddressLegal'] := ''''+ Results.FieldByName('AddressLegal').AsString +'''';
Возможно, при установке сервера вы не использовали опцию "Use Legasy Autentication Method..."
Тут можно посмотреть пошаговую инструкцию установки сервера: https://docs.google.com/document/d/1jch … -MR4Q/edit
Добавлю свои пять копеек про радиогруппы: да, в дизайнере самих радиокнопок не будет видно, как не видно заполненного выпадающего списка у ComboBox. По сути, это тот же выпадающий список, только он выпадает сразу и остаётся выпавшим навеки )))). А вместо чек-бокса у него радиобатон. Настройки такие же, как у Combobox.
On July 9, 1816, Argentina declared independence from Spain. In honor of this significant date, the cost of the basic course was reduced to $79.
Редкое сочетание: пират-чайник ))))
Но это легко исправить! Воспользуйтесь летним предложением: купите лицензию и получите базовый курс обучения в подарок:
Отношение "Многие-ко-многим" строится через кросс-таблицу.
Рекомендую пройти базовый курс обучения: https://vk.com/@createmyvisualdatabasea … nyi-uroven Данная тема рассматривается на третьем занятии ("Реляционные базы данных")
vovka3003, Кому костыль, а кому - решение )))
Раньше не обращал на это внимание, да и клиенты не жаловались, но, признаюсь, решение повышает удобство работы. Возьму к себе в копилочку. Спасибо!
P.S. пожалуй, надо добавить проверку свойства TdbDateTimePicker.Kind, так как данный компонент используется и для ввода времени. В этом случае либо не устанавливать обработчик, либо добавить формат для времени.
Нужно обратиться из скрипта к закладке на PageControl по ее имени.
Т.е. надо что-то такое:
Form_1.PageControl_1.TabSheet_name.Visible := false;
Form1.TabSheet1.Visible := false;
т.е. в скрипте задаётся путь не по Parent, а по Owner, а все компоненты принадлежат форме
Спасибо работает.
Вот только все таки хотелось бы результаты id выполнения процедуры frmAddSch1_Button1_OnAfterClick при создании новой записи ( '+IntToStr(frmAddSch1.Button1.dbGeneralTableId)
получить в переменную, которую в дальнейшем использовать для расчетов.
procedure frmAddSch1_Button1_OnAfterClick (Sender: TObject);
var
tmpNewID:integer; // переменная для хранения добавленного значения
begin
if frmAddSch1.Tag = 1 then // условие выполняется при создании новой записи
begin
tmpNewID := frmAddSch1.Button1.dbGeneralTableId;
SQLExecute ('INSERT INTO res (id_sch) VALUES ( '+IntToStr(tmpNewID));
// далее - ваш код
end;
end;
Возможно, нужное вам решение есть в примерах, описанных в цикле статей о программировании в MVD: https://vk.com/@createmyvisualdatabasea … mmirovanie
L10n. Internationalization
Continuation of the article "L10n. Origin"dedicated to the localization of the application.https://vk.com/@createmyvisualdatabasea … nalization
Dear readers!
I would appreciate your comments. It is very important for me to know your opinion on both the content of the articles and the orientation of the development of the educational project. Please, write in the comments what you think of this article. What more would you like to know about MVD programming? In the next article, I plan to consider an alternative internationalization option for a project in which localized resources are located in a database. Or is there more relevant information on the localization tool for existing projects? Waiting for your answers
Не первая тема на эту тему и, видимо, не последняя ))) Выходит, что правильней всего не хранить пароль подключения к базе в самой программе. Но тогда встаёт вопрос создания и управления пользователями на сервере MySQL силами приложения, созданного в MVD, правами доступа и всё такое )))
LL10n. Origin
If you want to create universal applications, sooner or later, you will think about its location. Since My Visual Database does not have built-in tools for this purpose, you will need to develop your own system to get the desired result.
The system must be simple and not need to modify the applications for its implementation. One of the key requirements is also the ability to change languages at any time.
Thus, in addition to the language resource preparation tool, we need a script that will load these resources.
Read the full article: https://vk.com/@createmyvisualdatabasea … 10n-origin
У меня есть пример создания меню из данных, хранимых в БД. Пример довольно сложный, описание здесь: https://vk.com/@createmyvisualdatabaseapp-menu в конце описания - ссылка для скачивания проекта.
Собственно, построение меню идёт в процедуре LoadMenu(). Меню создаётся на форме frmMain.
procedure LoadMenu;
var
tmpMainMenu: TMainMenu;
tmpDataSet:TDataSet;
tmpSQL:string;
tmpMenuItem: TMenuItem;
tmpParentStack: array[1..MAX_MENU_LEVEL+1] of TMenuItem; // стек для хранения родительских элементов при создании главного меню
tmpLevel: integer;
begin
tmpMainMenu := TMainMenu.Create(frmMain);
frmMain.Menu := tmpMainMenu;
// запрос формируется с учётом прав пользователя
tmpSQL :=
' select menu_.* , object_.name as object_name '+
' from menu_'+
' left join object_ on object_.id = menu_.id_object_';
// если роль указана, то добавляем фильтр по роли:
if RoleID <> 0 then
tmpSQL := tmpSQL +
' left join role_object_ on role_object_.id_object_ = object_.id'+
' where (menu_.id_object_ is null) or (role_object_.id_role_ = '+inttostr(RoleID)+' )';
// сортировка обеспечивает правильность сборки дерева
tmpSQL := tmpSQL + ' order by order_num';
//
SQLQuery(tmpSQL,tmpDataSet);
while not tmpDataSet.EOF do
begin
tmpMenuItem := TMenuItem.Create (tmpMainMenu);
tmpMenuItem.Caption := tmpDataSet.FieldByName('name').asString;
tmpMenuItem.Tag := tmpDataSet.FieldByName('id').asInteger;
// если указан объект, то подключаем обработчик
if not tmpDataSet.FieldByName('id_object_').isNull then
tmpMenuItem.OnClick := @MainMenuClick;
tmpLevel := tmpDataSet.FieldByName('level').asInteger;
//
if tmpLevel = 0 then
begin
tmpMainMenu.Items.Add(tmpMenuItem);
end
else
begin
tmpParentStack[tmpLevel].Add(tmpMenuItem);
end;
// записываем в стек текущий элемент как родителя для следующего уровня
tmpParentStack[tmpLevel+1] := tmpMenuItem;
// переходим к следующей записи
tmpDataSet.Next;
end;
tmpDataSet.Free;
end;
My Visual Database → Posts by k245
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi