procedure Form1_OnShow (Sender: TObject; Action: string);
begin
   Form1.ComboBox1.ItemsChecked[1] := True;
   Form1.ComboBox1.ItemsChecked[2] := True;
   Form1.Button5.Click;
end;

procedure Form1_CheckBox1_OnClick (Sender: TObject);
begin
  If Form1.CheckBox1.Checked then
  begin
     Form1.mniFile.Visible := True;
     Form1.mniOptions.Visible := True;
     Form1.mniAbout.Visible := True
  end else
  begin
     Form1.mniFile.Visible := False;
     Form1.mniOptions.Visible := False;
     Form1.mniAbout.Visible := False;
  end;
end;

А разве не работает просто поменять на true?
Сделал кнопку в код поставил это и все работает:

procedure Form1_btnHideMenu_OnClick (Sender: TObject; var Cancel: boolean);
begin
  Form1.mniFile.Visible := False;
  Form1.mniOptions.Visible := False;
  Form1.mniAbout.Visible := False;
end;

procedure Form1_btnShowMenu_OnClick (Sender: TObject; var Cancel: boolean);
begin
  Form1.mniFile.Visible := True;
  Form1.mniOptions.Visible := True;
  Form1.mniAbout.Visible := True;
end;
sibprogsistem wrote:

вот

Спасибо!

Добрый день.

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

Вот как будет выглядеть второй пример Дмитрия из первого поста, если использовать эту процедуру.

Моя процедура для добавления пунктов меню.

procedure MenuItemInsert (Form:TForm;itIndex,itSubIndex:integer;itCaption, ProcOnClick:string);
//Процедура добавляет пункт в главное меню формы.
//Form - форма, в главное меню которой будут вносится изменения
//itIndex - Добавить пункт в главное меню. По умолчанию: 0 - Файл, 1 - Инструменты, 2 - О программе
//itSubIndex - Подпункт меню. Если необходимо создать пункт в основном меню, то значение должно быть -1. //Если поставить значение -2, то пункт будет всегда добавляться в конец. 
//itCaption - Название нового пункта меню
//ProcOnClick - Название процедуры, срабатывающей по щелчку на пункте меню
var
  MyItem: TMenuItem;
begin
  MyItem:= TMenuItem.Create(Form);
  MyItem.Caption:= itCaption;
  If ProcOnClick <> '' then
    MyItem.OnClick:= ProcOnClick;
  If itSubIndex = -1 then
    Form.Menu.Items.Insert(itIndex,MyItem)
  else if itSubIndex > -1 then
    Form.Menu.Items[itIndex].Insert(itSubIndex,MyItem)
  else if itSubIndex = -2 then  //вставляем последним
    Form.Menu.Items[itIndex].Add(MyItem)
end;

Пример 1

MenuItemInsert (Form1,0,-1,'Справочники','');


В меню на форме "Form1" будет создан пункт "Справочники". Поскольку у него индекс 0, то он будет самым первым. Значение "-1" указывает, что это не подпункт.

Пример 2

MenuItemInsert (Form1,0,0,'Категории','CatOpen');


В первом пункте главного меню (индекс 0) будет создан подпункт "Категории", при клике на который сработает процедура "CatOpen".

8

(6 replies, posted in Russian)

Можно ещё файл проекта удалить, расширение vdb. Все остальные файл нужны.

9

(6 replies, posted in Russian)

У Вас в папке Script должен быть файл с расширением dcu. Это зашифрованная версия файла pas. Поэтому после компиляции  программы, Вы можете смело удалить pas файл из дистрибутива своей программы. Только перед удалением, скопируйте папку проекта в другое место, поскольку если Вы случайно удалите файл pas отовсюду, то все скрипты программы исчезнут...

10

(11 replies, posted in Russian)

Если в качестве разделителя используется табуляция, то всё очень просто.

  • Открываете Excel.

  • В меню выбираете пункт "Открыть файл". В фильтре файлов поставьте, чтобы отображались все файлы.
    Найдите свой текстовый файл.

  • Появится окно, в котором надо выбрать пункт "с разделителями". Щёлкаете на кнопку "Далее".

  • В новом окне в качестве разделителей выберите "знак табуляции". В нижнем окне предпросмотра убедитесь, что Excel правильно разделил данные по столбцам.

  • В следующем окне оставьте всё, как есть. И завершите работу мастера. 
    Затем удалите лишние столбцы.

Дмитрий, добрый день!

Проблема такая: решил сделать проверку на уникальность записей в таблице с помощью создания уникального индекса в базе SQLite. Сделал индекс с помощью сторонней программы. Теперь при попытке сохранить запись появляется ошибка "UNIQUE constraint failed". Как можно поставить свой текст для этой ошибки? Например, "Такая запись уже существует.".
Пытаюсь сделать так:

procedure frThemes_btnThemeSave_OnClick (Sender: string; var Cancel: boolean);
begin
  if Pos('UNIQUE constraint failed',ExceptionMessage)>0 then
  begin
    ShowMessage('111');
    Cancel:= True;
  end;
end;

Добрый день!
Для многопользовательской работы по сети лучше сразу начинать работать с MySQL. SQLite не слишком хорошо приспособлена для этого.
В SQLite нет нормального шифрования, управления пользователями, при больших объёмах данных начинает тупить.
Наверное, бОльшую часть вопросов можно решить с помощью костылей, но зачем, если в программе есть поддержка MySQL?

13

(2 replies, posted in Russian)

Всех с наступившим Новым годом!

Нашёл пример, который DriveSoft уже когда-то выкладывал.

14

(4 replies, posted in Russian)

pha1984 wrote:

1. Я вам отправил проект без базы данных. У меня в базе данных имеется 12417 записей, которые показываются в комбо. Так вот при первом открытии программы происходит задержка, так как комбо собирает весь список. По моему надо вставить лимит на показ записей.
2. Можете сказать почему вы не записали весь список функций на основной script.pas, использовали другую (function.pas)?
И кстати спасибо за помощь.

1) По первому пункту, к сожалению, подсказать не могу.
2) Мне так проще. Эти функции я часто использую в разных проектах, поэтому для меня намного удобнее вынести их в отдельный файл. Таким образом я просто не засоряю главный скриптовый файл. Есть, правда, минус: при компиляции проекта не происходит шифрование этого файла, как файла script.pas. Если хотите, то скопируйте нужные функции в окно программы и удалите самую верхнюю строку (uses 'functions.pas').

P.S.
Попробуйте посмотреть эту тему. http://myvisualdatabase.com/forum/viewtopic.php?id=2149

15

(4 replies, posted in Russian)

Добрый день!
Вот посмотрите. Добавил несколько пунктов в главное меню.
По поводу задержки: у меня всё открывается нормально. Пробовал на двух разных компьютерах.
Попробуйте:
1) Запустить на другом ПК.
2) Вы работаете по сети? База находится на том же ПК, что и программа? Если БД на другом компьютере в сети, то задержки с открытием могут быть с этим связаны.

P.S.
Забыл написать, что у меня версия программы 2.8.

У вас дважды объявлена переменная или другой идентификатор. Точнее сказать сложно, не видя кода.

17

(2 replies, posted in Russian)

Ещё можно использовать бесплатный компонент ZEOS Lib (http://sourceforge.net/projects/zeoslib/). Поддерживает множется баз данных. Легок в освоении. Правда, бывают глюки (напр., кракозябры вместо русского текста), но в последней версии редко.

18

(1 replies, posted in Russian)

В свойствах таблицы найдите пункт DefaultRowHeight и поставьте своё значение (см. скриншот).

19

(8 replies, posted in FAQ)

Немного усовершенствовал пример Дмитрия, сделав из него универсальную процедуру. Пригодится, если нужно раскрашивать несколько таблиц.

procedure ColorRowGrid (Grid:TdbStringGridEx;ColorEven,ColorOdd:TColor);
//Grid - Таблица для раскрашивания (Form1.TableGrid1)
//ColorEven - цвет четных строк
//ColorOdd - цвет нечетных строк
var
   iRow ,c: integer;
   q, iCol: integer;
begin
     c := Grid.RowCount - 1;
     q := Grid.Columns.Count-1;
     for iRow := 0 to c do
         for iCol := 0 to q do
         begin
             if iRow mod 2 = 0 then Grid.Cell[iCol,iRow].Color := ColorEven
             else
             Grid.Cell[iCol,iRow].Color := ColorOdd;
         end;
end;

//Пример
ColorRowGrid(Form1.TableGrid1,clBtnFace,clWindow);

Да. У меня такая же фигня. Только ещё и у компонента Group Box. Цвет шрифта не меняется.
Последняя версия программы.

21

(26 replies, posted in Russian)

Cтолкнулся с таким багом: компонент PageControl. Выставил расположение табов (TabPosition) слева (left). И теперь при левом клике мышкой на компоненте он у меня "убегает"... Смещается вправо. При остальных расположения табов (сверху, снизу, справа). Все нормально.
Версия 1.52. Windows 7 x64

СУММА ПРОПИСЬЮ В ПРОГРАММЕ И ОТЧЕТЕ
для всех версий MVDb

Нашел в Интернете еще один пример суммы прописью для FastReport. Переделал его и получилось следующее:
- 2 функции для написания на русском и английском.
При небольшой обработке их легко приспособить под другие языки.
- 3 вида валют: рубли, доллары, евро.
Можно добавить другие валюты.
- дробную часть (копейки, центы) можно отображать цифрами или прописью.
- во вложении пример использования функций как в программе, так и в отчете.

P.S.
Кстати, дабы не засорять код и легко переносить одни и те же функции/процедуры из одного проекта в другой можно воспользоваться следующим способом:
1) сохраните скрипт в отдельный файл .pas и положите его в папку "Script" проекта.
2) в программе на вкладке "Скрипт" в самом верху укажите

uses 'ваш файл.pas'

Эта строка обязательно должны быть самой первой!
Все. Теперь вы спокойно можете использовать функции, процедуры, переменные из данного файла в своей программе. (Совет: для удобного редактирования этого файла можно использовать специальные редакторы для программистов, которые поддерживают подсветку кода, напр., AkelPad, NotePad++, RJ TextEd и другие.).
Плюсы:
- все сторонние часто используемые фрагменты кода находятся в одном файле, которые легко переносятся из одного проекта в другой.
- если необходимо внести правки в функцию/процедуру достаточно открыть данный файл, а затем скопировать его с заменой во все свои проекты.
Минусы:
- файл не шифруется. В качестве простенькой защиты можно поменять или удалить расширение. Но при этом его все равно можно будет открыть в любом текстовом редакторе.

23

(1 replies, posted in Russian)

Дмитрий, подскажите, пожалуйста,  как работает DecimalSeparator?
Что-то я не пойму.
В Delphi она работает так:

var
  amount : Currency;
begin
  amount := 12.34;    // 12 долларов 34 центов

  // Показ с заданным по умолчанию символом десятичной точки
  ShowMessage('Amount = '+FloatToStrF(amount, ffCurrency, 10, 2));

  // Показ с новым символом десятичной точки
  DecimalSeparator := '|';
  ShowMessage('Amount = '+FloatToStrF(amount, ffCurrency, 10, 2));
end;

Amount = $12.34
Amount = $12|34

А в Вашей программе при попытке   сделать так

DecimalSeparator := '|';

появляется ошибка, что левая часть не соотвествует правой.

Вообще, я хочу сделать проверку дробного числа, и если в нем используется неправильный разделитель, то заменить его на правильный.
Делаю так:

  If not ValidFloat(Amount) Then
  begin
      DecimalSeparator := ',';
  end;

P.S.
И ещё не могу понять, можно ли сделать округление до определенного знака после запятой?
Т.е. до 2 знаков после запятой или одного. В данный момент у меня получается только до целого округлять.

Ну никак!... Ваш скрипт проекта:

Переделал свой пример. Переписал процедуру на функцию. Теперь он точно работает на версии 1.46. Постарался подробно описать, что за что отвечает и добавил несколько примеров кнопок.
Примечание: есть проблема с отображением иконок при дезактивированном состоянии. Как это решить пока не знаю..
P.S.
Еще раз переделал пример. Разобрался почему некорректно отображаются глифы в неактивном режиме. Для этого в функцию добавил еще одно свойство. Также добавил комментарий, как добиться корректной работы. Единственное, что в комменте забыл указать - файл bmp нужно создавать без альфа-канала! Т.е. максимально 24бит. Добавил больше сотни изображений-примеров (скопировал из папки Delphi).

kunar80 wrote:
alex842 wrote:

Создание собственной кнопки со своей иконкой.

Никак не соображу, как в Вашем проекте сделать так:
1) изначально одна кнопка активна, две другие не активны;
2) при клике на активной кнопке она становится не активной, две другие активируются;
3) всплывающие подсказки на этих кнопках - как сделать?

К сожалению до компа доберусь нескоро, а какую версию функции выложил сюда уже не помню. Поэтому попробуйте так:
1. Проверьте в моих комментах к функции, есть ли у нее свойство enabled. Если нет, то добавьте, например, переменную BtnEnable: Boolean в функцию через точку с запятой. Затем вставьте новую строку в раздел begin...end.

Btn.Enabled:= BtnEnable;

Теперь для того, чтобы активировать кнопку наберите функцию и в нужном месте напишите true или false.
2. Также с подсказкой. Если переменной нет, то добавьте переменную BtnHint: string, и объявите её Btn.Hint:= BtnHint;