Есть таблица "Проекты", у которой есть поле "Статус проекта".
К этому полю привязана таблица "Статусы проекта".
На форме Проекты есть комбобокс "Статус проекта", который запускает SQL запрос, отображающий на форме проекты с выбранным в комбобоксе статусом.
Т.е. выбираем в комбобоксе какой то один статус и на форме отображаются проекты только с этим статусом.
Требуется построить отчет сразу по всем значениям комбобокса, т.е. чтобы в отчете было так:
Статус "Открытые"
Проект 1
Проект 4
Проект 8
Статус "Приостановленные"
Проект 2
Проект 3
Проект 9
Статус "В работе"
Проект 5
Проект 7
Что то не могу сообразить, каким образом решать эту задачу с помощью дизайнера отчетов. Посоветуйте, пожалуйста.

Есть вычисляемое поле "Сумма" (Цена * Кол-во).
Цена в таблице на форме отображается как положено с пробелом в качестве разделителя тысяч и двумя знаками после запятой.
А вычисляемое поле Сумма, хоть и выбрал ее формат в БД как денежный, отображается без разделения тысяч.
Что нужно сделать, чтобы сумма в таблице отображалась с разделением тысяч и двумя знаками после запятой?

Задачу свою решил по материалам форума.
Может кому-нибудь полезно будет:
//
procedure CreateTblMenu();
var
       TemplateItem:TMenuItem;
    SData:TDataSet;
begin
        // построение всплывающего меню шаблонов писем

       SQLQuery('SELECT id, template_name FROM tbl_email_templates', SData);//список всех id шаблонов писем

       while not SData.eof do
       begin
           TemplateItem:= TMenuItem.Create(Form_1);
           TemplateItem.Caption := SData.FieldByName('template_name').asString; // пункт меню = наименование шаблона письма
           TemplateItem.Hint := SData.FieldByName('id').asString; // запоминаем id шаблона письма у данного пункта меню
           Form_1.TableGrid_1.dbPopupMenu.Items.Insert(3, TemplateItem); // Отображаем пункт меню
           TemplateItem.OnClick := @CreateMessage; //у всех пунктов меню одна и та же процедура
           SData.Next;
       end;


end;

procedure CreateMessage(Sender:string);
begin
    // создаем сообщение
     Frm_Email_Message.Edit_TemplateID.Text := TMenuItem(Sender).Hint; // получаем ID шаблона выбранного пункта меню
     ...
     Frm_Email_Message.Show; // отображаем форму письма, применив шаблон письма в соотв. с его ID

end;
//
А если кто-нибудь подскажет, как создавать подобным образом пункты меню, передавая еще и имя процедуры, которую он должен выполнить, то совсем здорово будет.

Есть таблица в БД "Шаблоны писем".
Таблица содержит поля "Имя шаблона","Тема письма", "Текст письма"
На форме есть таблица "Товары".
Надо при запуске приложения создать динамически контекстные пункты меню (правый клик) для этой таблицы, где каждый пункт меню соответствует шаблонам писем.
Т.е. сколько есть разных шаблонов в БД, столько и пунктов меню.
При клике на выбранный пункт шаблона должна запускаться одна и та же процедура, но в нее надо передать список выбранных строк товаров (массив ID товаров) и ID шаблона письма.
Каким образом динамически задавать пункты меню, если обычно их надо объявлять в блоке var?

Спасибо! То, что надо !

Комбобокс обычно привязывается к одному из полей таблицы.
А мне для наглядности надо выводить определенным образом композицию данных из двух полей.
Т.е. в таблице есть поле ФИО и поле email.
И в комбобоксе надо чтобы выводилось так: Сергей Иванов <email@mail.ru>
Как это сделать?

Можно ли вывести всплывающее сообщение в область уведомления  Windows?
В Delphi вроде бы для этого используется класс TNotification.
Но в MVD его нет.
Кто-нибудь знает, как это сделать?

При выполнении метода Memo.SaveToFileUTF8 записывается файл в кодировке UTF8 с меткой кодировки BOM в начале файла.
Есть ли способ отключить эту метку при сохранении в UTF8?
Или можно ли как-то избавиться от этой метки после сохранения?
Т.е. нужен файл в кодировке UTF8, но без метки BOM.

На главной форме есть кнопка, которая открывает форму справочника адресов (таблица).
Кликаю по выбранному адресу, справочник адресов закрывается и скриптом передаю в edit на главной форме выбранное значение адреса.
Это значение я беру путем определения, какая строка в таблице справочников адресов была selected.
Все работает как надо.
Однако, каждый раз когда открываю справочник адресов, то в таблице адресов всегда selected строка предыдущего выбранного адреса.
Можно ли как-то сделать так, чтобы таблица делала что-то типа UnselectRows при открытии формы справочника адресов?

Нет такого оператора "open".
Если его заменить на Show, то так тоже не работает.
Немодальная форма  доступна только с того окна, с которого открылась первой.

Есть главная форма MainForm.
На ней кнопка, которая по клику открывает немодально HistoryForm (HistoryForm.Show).
В результате можно работать одновременно на обеих формах.
На главной форме также есть таблица, с которой модально открывается форма редактирования проекта ProjectForm.
На форме проекта тоже есть кнопка, которая открывает немодально HistoryForm (HistoryForm.Show).
Если немодальную форму HistoryForm, открытую  с главной формы, не закрыть вручную перед открытием проекта, то с формы проекта к ней нет доступа, т.к. ее родительская форма не форма проекта, а главная.
Можно ли как-то организовать  программно изменение родительской формы у HistoryForm.?
Т.е. надо иметь возможность немодально открывать форму HistoryForm с любой другой формы, не заботясь об ее ручном закрытии если она перед этим была вызвана с другой формы.

12

(21 replies, posted in Russian)

DriveSoft wrote:

3. К сожалению не понял, не могли бы показать скриншотом?

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

13

(21 replies, posted in Russian)

DriveSoft wrote:

4. Изменение цвета кнопок невозможно даже без стиля начиная с Windows Vista.

Как это невозможно?
Приложены цветные кнопки в реальном проекте на Win10.
Их цвет затирается стилем, если запускать проект со стилями.

14

(21 replies, posted in Russian)

1. В моем проекте я делал квадратные маленькие кнопки такой ширины, чтобы стандартные иконки (добавление, редактирование, удаление) отображались по центру кнопки.
Но, если проект запускать со стилями, то иконки сдвинулись влево, прилипнув к самому левому краю кнопки.
2. Подавляющее кол-во стилей как будто застряли в Win XP и сделаны по принципу "вырви глаз". Сочетание цветов удивительное.
Очевидно, надо добавить возможность редактирования стилей.
3. В чекбоксах - если надпись чекбокса размещена слева от него, то правым краем она прилипает к квадратику чекбокса, хотя при разработке был выбран размер рамки надписи так, чтобы надпись не касалась квадратика.
4. Стили не дают возможность изменять скриптом цвет кнопок.
5. Стили изменяют высоту компонента "файл".
Т.е. получается, что применить стили нет возможности (пока). Хотя очень хочется.

Выделяю несколько строк в таблице (не по порядку).
Каким образом получить в скрипте номера этих строк?

Есть текстовая строка, в которой между словами может быть не один, а несколько пробелов (случайное кол-во).
Надо получить массив слов, разбивая эту строку функцией SplitString.
Например, это можно сделать так: ArrStr := SplitString (mystring, ' ');
Кол-во слов в этом массиве получаем используя функцию Length (ArrStr);
Далее каждое слово выдергиваем перебором массива по кол-ву элементов в массиве.
Однако, функция SplitString неправильно разбивает строку на слова, если между словами больше, чем один пробел.
Второй пробел она считает началом следующего слова.
Как решить эту проблему? Может как то по другому решить?

Компонент RichEdit имеет метод SaveHTML для записи в файл HTML формата.
Когда сохраняешь данные в HTML файл, то при его открытии браузером весь текст, естественно, растягивается на всю ширину экрана.
Но, мне необходимо, чтобы ширина текста была ограничена, например, 600 пикселями.
В HTML коде, понятно, для этого можно весь текст поместить в теги table и задать для этого тега его ширину.
В RichEdit можно вручную создавать таблицы и их ширина попадает в HTML код, но это не выход в реальной работе.
Есть ли способ автоматического задания ширины текста в тегах HTML файла при выполнении метода SaveHTML?

Вертикальный скрол включается автоматом, когда форму максимизирую.
Т.е. утверждение, что анкоры и автоскролл несовместимы тут не работает.
Ладно, может кто подскажет, как вертикальный скрол включить принудительно при открытии формы?
Т.е. не AutoScroll включить, а просто вертикальный скролл, чтобы он был Enabled.

Переставил изменение высоты строк на OnShow формы. Не помогло. Есть еще версии?

Имеется главная форма с размером при разработке, меньше чем весь дисплей.
При запуске приложения она отображается посередине экрана.
На форме есть таблица с анкорами по всем сторонам.
Таблица имеет включенное свойство AutoScroll.
На событии таблицы OnChange есть код установки высоты всех строк:
Frm_Project_List2.TableGrid_MainWall.Row[ii].RowHeight := 33;
Если кол-во строк такое, что при такой высоте все они не влезают при начальном отображении формы, то должна включаться вертикальная полоса прокрутки.
Но, она не включается!!!
Т.е. отображение таблицы при первоначальном запуске формы как бы не понимает, что высота строк по умолчанию была изменена на другое значение и поэтому, надо включить полосу вертикальной прокрутки.
А вот если развернуть окно формы на весь экран, то только тогда включается автопрокрутка.
Хотя при этом она может быть и не нужна, т.к. при полноэкранном отображении формы все строки полностью влезают в экран и их прокручивать не надо.
Как побороть этот баг?

Есть код:
try
      Frm1.MySQLConnection.Connect;
except
      ShowMessage('Соединиться с сервером базы данных не удалось ');
      Frm1.Close;
      exit;
end;
Этот код правильно срабатывает, если есть ошибка при подключении к работающему MySQL серверу.
Но, если на сервере не запущена служба MySQL, то этот код через некоторую временную задержку сначала вызывает окно ошибки "Connect time out", а только потом обрабатывает код в блоке except.
Как предотвратить появление окна с ошибкой  "Connect time out", если сервер не запущен?

Есть главная форма Проекты с таблицей Проекты.
Для ввода проектов используется форма "Проект".
На ней есть таблица - "Задачи".
Т.е. чтобы открыть Задачу, надо с формы Проекты открыть нужный Проект и потом открыть форму Задача.
...
Для быстроты доступа к задачам таблица базы данных "Задачи" выведена также на главную форму Проекты.
Когда кликаю по Задаче программно открываю окно формы редактирования нужной Задачи.
Но, из этого окна задачи мне надо реализовать открытие проекта, к которому эта задача принадлежит.
Для этого кодом кнопки я закрываю окно задачи (Frm_Task.Close), а затем показываю окно Проект Frm_Project.Show
Это все работает, но, поскольку код Frm_Task.Close находится в процедуре обработки нажатия кнопки на форме Frm_Task, то эта форма остается видимой, а поверх нее открывается окно Проекта.
И если сейчас попытаться открыть форму Задачи, то оно не отобразится, поскольку остается сзади формы Проекта.
Ведь форма Frm_Task является вызвавшей форму Проект.
Можно ли как то программно по настоящему закрыть вызвавшую форму?
Или поместить вызвавшую форму поверх вызванной?

Есть таблица у которой включено свойство возможности перетаскивания столбцов (изменения их порядка).
Требуется организовать цикл перебора столбцов по их порядку после перетаскивания.
Если обращаюсь к номерам столбцов через их индексы (Columns i), то эти индексы никак не меняются, когда произошло перетаскивание.
Их порядок всегда такой, как прописано в настройках таблицы.
Каким образом получить порядковые номера столбцов после их перетаскивания?

Нет, это не то.
У нас в офисе на компьютерах пользователей стоят разные программы для работы с таблицами Excel, PlanMaker (FreeOffice), WPS Office.
Я создаю скрипт экспорта данных из базы, который должен взаимодействовать с той программой, которая ассоциирована с xls файлом на конкретном ПК.
Синтаксис взаимодействия по OLE у Excel, PlanMaker (FreeOffice), WPS Office не идентичный.
Поэтому, до начала запуска OLE мне надо знать, какая программа ассоциирована с xls файлом.

Есть ли какая-нибудь функция, которая позволяет определить, какое приложение ассоциировано с файлом определенного расширения?