Нет. Не работает.
Мне нужно передать программе два ключа: ключевое слово "deletefolder" и затем путь к папке, который надо удалить.
Придется, видимо, по-другому выкручиваться: записывать информацию в спец. файл, а потом утилита будет уже из него считывать переменные.

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

path\Utils.exe deletefolder 'S:\Portable Apps\'.

В настройках каждой формы есть опция "sizeable". Поставьте "true' и, пользователи смогут изменять размер формы.

kunar80 wrote:
alex842 wrote:

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

А не логичнее ли картинки кнопок загрузить в базу (размер ведь у них небольшой), а не хранить в открытой папке Images?

Возможно. Нужно будет посмотреть.

30

(26 replies, posted in Russian)

Дмитрий, подскажите, пожалуйста,  правильно ли я понимаю, что для того, чтобы программа искала файлы в той же папке, где лежит исполняемый файл, не обязательно использовать конструкцию
ExtractFilePath(Application.ExeName)?

Т.е. у меня сейчас, вроде бы, адекватно работают оба варианта:

ExtractFilePath((Application.Exename)+'Images\Glyphs\add_card.bmp')

и

'Images\Glyphs\add_card.bmp'

31

(26 replies, posted in Russian)

DriveSoft wrote:

alex842
К сожалению это не изменить, так задумано в Delphi.

Странно. Достаточно много работал в Delphi, но не обращал внимания на это. smile
Но это не критично. Главное помнить об этом.

32

(26 replies, posted in Russian)

Не знаю, обсуждалось это или нет, но сейчас только заметил: при установке своего цвета для ячейки в шестнадцатеричном формате у Вас используется формула:синий-зеленый-красный, в то время, как во всех графических редакторах (проверял Photoshop,  Paint.Net и ряде других) наоборот: красный-зеленый-синий. Поэтому при попытке скопировать код из фотошопа, я вместо оранжевого получаю синий... smile
Это так и задумывалось? И можно ли поправить на более привычную схему?

Супер! Спасибо!

РАЗЛИЧНЫЕ ДЕЙСТВИЯ С МЕНЮ С ПОМОЩЬЮ СКРИПТОВ
Для новых версий. В 1.46 не работает!
Собрал в данном примере все, что уже обсуждалось и выкладывалось в разрозненном виде на форуме, касающееся меню:

  • удаление стандартных пунктов главного меню;

  • добавление собственных пунктов в главное меню

  • удаление стандартного меню грида

  • перевод стандартного меню грида

  • добавление собственных пунктов в меню грида

Некоторые (свои же процедуры) немного доделал, кое-что поменял. В целом они стали проще в применении.

P.S. Нашёл на форуме, ещё пару опций, которые связаны с настройкой интерфейса. Решил добавить в этот же пример.

frmOptionsdbCore.TabDatabaseLoc.TabVisible := False; //скрываем вкладку "Файл базы данных" в окне настроек.
frmOptionsdbCore.TabSettings.TabVisible := False; //скрываем вкладку "Настройки" в окне настроек.

Файл перезалил.

ЗАМЕНА АНГЛИЙСКИХ КАВЫЧЕК НА ЁЛОЧКИ
Функция была написана для обработки названий компаний. Адекватно обрабатывает до трёх кавычек: Компания "Сименс" и ООО "Компания "Сименс". В результате получим: Компания «Сименс» и ООО «Компания «Сименс».
Работает во всех версиях.

Решил воскресить данную тему и поделиться несколькими своими наработками:
Создание собственной кнопки со своей иконкой.
Актуально для последних версий программы. На 1.46 не работает.

P. S.
Нашёл ошибку в функции, которая приводила к тому, что на форме с названием отличном от Form1, могла появляться ошибка. Поправил, файл перезалил.

37

(26 replies, posted in Russian)

andrey_gb10 wrote:

Добавьте всё-таки наконец , чтобы можно делать было не грид на главном окне- а меню с возможностью выбора функций

пример:::

Сервис      Работа с БД      Настройки     Отчеты      Выход


База данных бы приобрела серьезный и коммерческий вид!
Реально было бы круто!!!

Вы имеете в виду, изменить главное меню программы? Так это можно сделать в версиях старше 1.46 с помощью скриптов.
Вот мой пример с процедурами для упрощения этой задачи.

Добрый день!
Собственно, вопрос в заголовке.
Есть таблица. В ней есть колонка с электронным адресом.
Как получить адрес из колонки я знаю.
Допустим, я назначаю на кнопку текстовую строку с полученным адресом. Можно ли заставить программу при щелчке на кнопку отрыть новое письмо в программе по умолчанию?
По типу того, как этого сделано в эксель, когда при клике на ячейку с адресом открывается дефолтный почтовик.

Дмитрий, добрый день!
Парочка вопросов и предложений:
1) Улучшить функцию GetFilesList: возможность получения списка файлов из папки и её подпапок, возможность получения списка только папок, без файлов.
2) Подскажите, пожалуйста, что за компонент Вы используете для TableGrida? Хочется про него поподробнее почитать. И как к нему обращаться из скрипта, т.е. var Grid: T...???
3) Хотелось бы узнать, как обстоят дела с решением проблемы, когда каждое новое окно в программе открывается как отдельный процесс/приложение. Точнее это не то, чтобы проблема, но раздражает. Причем когда открываешь "встроенные" окна "Настройка" и "О программе", то все нормально. И когда создаешь окно в скрипте (TForm.Create(Application)), тоже всё нормально.
4) Не могли бы Вы примерно рассказать, что предполагается нового в ближайших версиях? roll

Спасибо! Работает как надо.

Добрый день!
Подскажите, пжл., как выбрать с помощью запроса в один столбец уникальные данные из двух столбцов таблицы?
Напр., в базе есть таблица Dover. В ней столбцы DoverNo (TEXT), DoverDate (DATE), DoverFrom (TEXT), DoverTo (TEXT), Annotation (TEXT). Как мне выбрать из нее в таблицу на форму (FrDoverPersons.TableGrid1)  уникальные значения из столбцов DoverFrom (TEXT), DoverTo (TEXT)? Т.е. чтобы все уникальные значения были в одном единственном столбце этой таблицы.

42

(4 replies, posted in Russian)

Попробуйте исправить так:

     if InputBox ('Запрос','Введите пароль','') = '111' then Cancel := True   

Вместо <> поставить = .

Сделал еще один вариант.
Мжет быть он лучше подойдет.

zoomix wrote:

Спасибо! В принципе пойдет, хотя здесь окрашивание (даже мигание) всей строки сразу. Я думал это как то плавнее, частями, по словам, по буквам. Текст как бы проплывает за цветным фильтром и виден в другом цвете по мере проплывания - голова текста уже красная, а хвост - еще зеленый.
Но если так сделать сложно, то и это пойдет. Еще раз  спасибо!

По-моему, стандартными средставами так нельзя сделать даже в самом Delphi. Только с помощью сторонних компонентов. Может быть, Дмитрий когда-нибудь и "прикрутит" такой компонент к своей программе, но не думаю, что это будет скоро.

Посмотрите, так пойдет?

46

(2 replies, posted in Russian)

Чтобы получить кол-во записей в гриде, воспользуйтесь свойством RowCount:

var
 i:integer;
begin
  ShowMessage(IntToStr(Form1.TableGrid1.RowCount));

Нашел пример, который когда-то Дмитрий делал по расраске грида:

procedure Form1_bSearch_OnAfterClick (Sender: string);
var
   i,c: integer;
   sDate: string;
begin
     c := Form1.GridSearch.RowCount-1; // узнаем количество строк в гриде                                                                         
     for i := 0 to c do // цикл перебора всех строк в гриде                                                                                                
     begin
          sDate := Form1.GridSearch.Cells[0,i]; // получаем из первого столбца текстовое значение даты                                                                                                                                 
          if ValidDate(sDate) then // на всякий случай проверяем, верный ли формат даты                                                                                                                            
             if StrToDate(sDate) <= (Date-3) then Form1.GridSearch.Cell[0,i].Color := clYellow; // сравниваем дату в ячейке с текущей датой +3 дня, если дата меньше или равно, то окрашиваем в желтный                                                                                                                                                                                                                                            
     end;
end;

Можно сделать так, чтобы выделялась не вся строка, а только одна ячейка.
Вставьте в событие OnShow такой код:

  Form1.TableGrid1.Options := Form1.TableGrid1.Options - goSelectFullRow;

Или можно так сделать:

Form1.TableGrid1.Options := Form1.TableGrid1.Options - goSelectFullRow+goIndicator;

В этом случае в начале строки появляется индикатор, который отмечает выделенную строчку.

Dmitriy.Himichev wrote:

здравствуйте ещё раз) У меня версия старая - 1.44 )) А хочется, чтобы можно было копировать содержимое любой ячейки, будь то адрес, или телефон, и т.д. Поможет ли мне что-нибудь при такой ситуации?

Во-первых, скачайте бесплатную бету 1.46
https://www.dropbox.com/s/30ysr48sd8ca4 … 6.zip?dl=0
Затем сделайте следующее:
Поместите на форму компонент TEdit.
В событие формы OnShow вставьте такой код:

procedure Form1_OnShow (Sender: string; Action: string);
begin
  Form1.Edit1.Visible:= False; //делаем компонент невидимым для пользователя
end;

Затем в событие OnClick таблицы напишите следующее:

procedure Form1_TableGrid1_OnCellClick (Sender: string; ACol, ARow: Integer);
var
  sCol, sRow:integer;
  CellText:String;
begin
  sCol:= Form1.TableGrid1.SelectedColumn; //выбранная колонка
  sRow:= Form1.TableGrid1.SelectedRow; //выбранная строка
  CellText:= Form1.TableGrid1.Cells(sCol,sRow); //текст выбранной ячейки
  Form1.Edit1.Text:= CellText; //присваиваем компоненту TEdit текст выделенной ячейки
  Form1.Edit1.SelectAll; //выбираем все
  Form1.Edit1.CopyToClipboard; //копируем в буфер
end;

Но при таком подходе любой клик по любой ячейке будет приводить к копированию в буфер. Поэтому я бы сделал отдельную кнопку и "повесил" данный код на событие OnClick кнопки, чтобы не грузить лишний раз буфер обмена.

DriveSoft wrote:

alex842
Таким образом строка не скопируется в буфер обмена, чтобы это работало в версии 1.46, можно расположить рядом компонент TextBox, присваивать ему текст ячейки, и вызывать метод CopyToClipboard (Edit1.CopyToClipboard)

Точно. Невнимательно прочитал задачу...

Dmitriy.Himichev wrote:
DriveSoft wrote:

Приветствую,


Удерживая Ctrl, просто кликаете левой кнопкой мыши по нужной ячейке, и ее содержимое копируется в буфер обмена.
Этот способ точно не подходит?

к сожалению нет.. пользователи привыкли к стандартным операциям)

Есть ли ещё варианты?

Подcкажите, у Вас беплатная версия программы?
И Вам нужно только адрес копировать? Другие ячейки не нужны?
Тогда можно сделать примерно так:
Где-нибудь над таблицей или рядом поместить обычную кнопку "Копировать адрес e-mail" и в событие OnClick прописать следующий код:

Form1.TableGrid1.Cells[2,Form1.TableGrid1.SelectedRow] :

Только замените название формы и таблицы на свои, т.е. такой шаблон:

<форма>.<таблица>.Cells[<номер колонки>,<форма>.<таблица>.SelectedRow];

В версии 1.46 бета должно работать.