Можно, для этого необходимо деактивировать пункт меню в TableGrid, который отвечает за это. Сделать это можно так

procedure Form1_OnShow (Sender: string; Action: string);
begin
    Form1.TableGrid1.dbPopupMenu.Items[0].Enabled := False;
end;

Astra30
Использование подотчетов возможно только с использованием скрипта, который есть в примере, который я вам дал выше.

Чтобы вывести имя файла, необходимо в этой же таблице БД создать вычисляемое поле. Например если поле с типом ФАЙЛ имеет имя "userfile", тогда создайте вычисляемое поле с именем (имя можно любое)

calc_userfilename

в самом вычисляемом поле напишите

userfile_filename

теперь можете вывести данное выч. поле в грид.

Raspr
Можно и так, только у вас нет проверки при редактировании записи, если вдруг кто то сменит телефон, который уже есть в базе.

mikhail_a
1. Можно проверять имя файла (Msg.MessageParts.Items[k]).Filename) на недопустимые символы и заменить их на допустимые функцией  ReplaceStr


2. Можете узнать тип сообщения так

TIdText(Msg.MessageParts.Items[k]).ContentType

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

text/plain

или

text/plain; format=flowed


3. Для этого есть функция escape_special_characters()


4. http://www.e-iter.net/Knowledge/Indy9/007617.html
http://www.e-iter.net/Knowledge/Indy9/007544.html

3,206

(6 replies, posted in Russian)

Рисовать можно на компоненте Image, пример

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    Form1.Image1.Canvas.Brush.Style := bsClear;
    Form1.Image1.Canvas.Font.Orientation := 2700;
    Form1.Image1.Canvas.MoveTo(50, 50);
    Form1.Image1.Canvas.LineTo(100, 100);
    Form1.Image1.Canvas.TextOut(150, 150, 'X=###');
    Form1.Image1.Canvas.Ellipse(30, 30, 45, 45);
end;

Скачайте пожалуйста последнюю бета версию 3.5
https://www.dropbox.com/s/f3j4kfpnttm1o … b.zip?dl=0



Пример

procedure FillGridFiles(Grid: TdbStringGridEx; path: string);
var
    sl: TStringList;
    i,c: integer;
    NxTextColumn: TNxTextColumn;
begin
    sl := TStringList.Create;
    sl.Text := GetFilesList(path);

    Grid.Columns.Clear;
    try
        Grid.Columns.Add(TNxTextColumn);
    except
    end;
    Grid.Columns[0].Color := clWhite;

    c := sl.Count-1;
    for i := 0 to c do
    begin
        Grid.AddRow;
        Grid.Cells[0, Grid.RowCount-1] := sl[i];
    end;
    sl.Free;
end;


procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    FillGridFiles(Form1.TableGrid1, 'C:\Backup');
end;

К сожалению не сталкивался с таким, лучше конечно использовать ip или имя компьютера в сети, чтобы не допустить такого.
Если все же ресурс доступен в сети по имени или ip, думаю можно скриптом подставлять ip ресурса вместо буквы диска при выборе файла.

Astra30 wrote:

Ни кто не может подсказать, почему одни и те же строки выводятся в отчёте несколько раз?
Я в тупике... sad
Вот пример -  https://yadi.sk/d/IEHxLESa3KhVYV


В вашем случае необходимо использовать подотчеты, как в данном примере
http://myvisualdatabase.com/forum/viewtopic.php?id=1665

mikhail_a wrote:

Ругается на строке   IdPOP3: TIdPOP3; 
Пишет "Unknown type: 'TIdPOP3' at 7:18.
Очевидно библиотеки не хватает. Где ее взять и как подключить?

Забыл, скачайте пожалуйста последнюю бета версию
https://www.dropbox.com/s/f3j4kfpnttm1o … b.zip?dl=0

mikhail_a wrote:

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

http://myvisualdatabase.com/forum/viewt … 058#p21058

Готово
http://myvisualdatabase.com/forum/viewt … 058#p21058

Получение почты (POP3) (начиная с версии 3.5)


Пример:

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
  i, MsgCount: integer;
  k, AttachCount: integer;
  IdPOP3: TIdPOP3;
  Msg: TIdMessage;
begin
  IdPOP3 := TIdPOP3.Create(Form1);

  IdPOP3.Host := '';
  IdPOP3.Port := 110;
  IdPOP3.Username := '';
  IdPOP3.Password := '';

  IdPOP3.Connect;
  if IdPOP3.Connected then
  begin
    Msg := TIdMessage.Create(Form1);
    MsgCount:=IdPOP3.CheckMessages;

    // emails
    for i:=1 to MsgCount do
    begin
          Msg.Clear;
          IdPOP3.Retrieve(i, Msg);
          //IdPOP3.RetrieveHeader(i, Msg);
          //IdPOP3.Delete(i)
    
          Form1.Memo1.Lines.Add(IntToStr(i)+'--- Size: ' + IntToStr(IdPOP3.RetrieveMsgSize(i)));
          Form1.Memo1.Lines.Add('Subject: ' +Msg.Subject);
          Form1.Memo1.Lines.Add('===============');
          Form1.Memo1.Lines.Add('ContentType: '+Msg.ContentType);
          Form1.Memo1.Lines.Add('Date: '+DateToStr(Msg.Date));
          Form1.Memo1.Lines.Add('From: '+Msg.From.Address);
          Form1.Memo1.Lines.Add('Body:');
          Form1.Memo1.Lines.Add(Msg.Body.Text);
    
          // Attachments
          AttachCount := Msg.MessageParts.Count-1;
          for k := 0 to AttachCount do
          begin
                if (Msg.MessageParts.Items[k] is TIdAttachment) then // Save file
                begin
                  if FileExists(TIdAttachment(Msg.MessageParts.Items[k]).Filename) then
                    DeleteFile(TIdAttachment(Msg.MessageParts.Items[k]).Filename);
        
                  // Save attachment to the current folder
                  Form1.Memo1.Lines.Add('    -- File: '+TIdAttachment(Msg.MessageParts.Items[k]).Filename);
                  TIdAttachment(Msg.MessageParts.Items[k]).SaveToFile(TIdAttachment(Msg.MessageParts.Items[k]).Filename);
                end else
                if (Msg.MessageParts.Items[k] is TIdText) then // Text attachment
                begin
                    Form1.Memo1.Lines.Add('    -- Begin attachment '+IntToStr(k));
                    Form1.Memo1.Lines.Add('    '+ TIdText(Msg.MessageParts.Items[k]).Body.Text );
                    Form1.Memo1.Lines.Add('    -- End attachment '+IntToStr(k));
                end;
          end;
    
          Form1.Memo1.Lines.Add('===============');
    end;

    Msg.Free;
    IdPOP3.Disconnect;
  end;

  IdPOP3.Free;
end;


Проект с примером: http://myvisualdatabase.com/forum/misc. … download=1

3,214

(4 replies, posted in FAQ)

Read email messages (POP3) (version 3.5 and above)


Example:

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
  i, MsgCount: integer;
  k, AttachCount: integer;
  IdPOP3: TIdPOP3;
  Msg: TIdMessage;
begin
  IdPOP3 := TIdPOP3.Create(Form1);

  IdPOP3.Host := '';
  IdPOP3.Port := 110;
  IdPOP3.Username := '';
  IdPOP3.Password := '';

  IdPOP3.Connect;
  if IdPOP3.Connected then
  begin
    Msg := TIdMessage.Create(Form1);
    MsgCount:=IdPOP3.CheckMessages;

    // emails
    for i:=1 to MsgCount do
    begin
          Msg.Clear;
          IdPOP3.Retrieve(i, Msg);
          //IdPOP3.RetrieveHeader(i, Msg);
          //IdPOP3.Delete(i)
    
          Form1.Memo1.Lines.Add(IntToStr(i)+'--- Size: ' + IntToStr(IdPOP3.RetrieveMsgSize(i)));
          Form1.Memo1.Lines.Add('Subject: ' +Msg.Subject);
          Form1.Memo1.Lines.Add('===============');
          Form1.Memo1.Lines.Add('ContentType: '+Msg.ContentType);
          Form1.Memo1.Lines.Add('Date: '+DateToStr(Msg.Date));
          Form1.Memo1.Lines.Add('From: '+Msg.From.Address);
          Form1.Memo1.Lines.Add('Body:');
          Form1.Memo1.Lines.Add(Msg.Body.Text);
    
          // Attachments
          AttachCount := Msg.MessageParts.Count-1;
          for k := 0 to AttachCount do
          begin
                if (Msg.MessageParts.Items[k] is TIdAttachment) then // Save file
                begin
                  if FileExists(TIdAttachment(Msg.MessageParts.Items[k]).Filename) then
                    DeleteFile(TIdAttachment(Msg.MessageParts.Items[k]).Filename);
        
                  // Save attachment to the current folder
                  Form1.Memo1.Lines.Add('    -- File: '+TIdAttachment(Msg.MessageParts.Items[k]).Filename);
                  TIdAttachment(Msg.MessageParts.Items[k]).SaveToFile(TIdAttachment(Msg.MessageParts.Items[k]).Filename);
                end else
                if (Msg.MessageParts.Items[k] is TIdText) then // Text attachment
                begin
                    Form1.Memo1.Lines.Add('    -- Begin attachment '+IntToStr(k));
                    Form1.Memo1.Lines.Add('    '+ TIdText(Msg.MessageParts.Items[k]).Body.Text );
                    Form1.Memo1.Lines.Add('    -- End attachment '+IntToStr(k));
                end;
          end;
    
          Form1.Memo1.Lines.Add('===============');
    end;

    Msg.Free;
    IdPOP3.Disconnect;
  end;

  IdPOP3.Free;
end;


Project example:

3,215

(6 replies, posted in Russian)

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

3,216

(5 replies, posted in General)

manixs2013 wrote:

Thank you AD1408. Appreciated!

But again the messagebox intended to SAVE is still displaying when you press the print Button.  For me this is a bug.. can we solve this problem?

So conceived. The report system gets data from database, thus before report system will get data from database, a current data on form must be saved to database by automatically pressed save button.


I have added a script to prevent showing MessageBox when you click report button.

3,217

(5 replies, posted in General)

Check out this topic
http://myvisualdatabase.com/forum/viewtopic.php?id=2277

3,218

(6 replies, posted in Russian)

Здравствуйте.


В отчете вы можете вставлять графики, не могли бы вы привести пример необходимого графика? т.к. у вас три координаты, он должен быть трехмерным?

Скачайте пожалуйста последнюю бета версию программы
https://www.dropbox.com/s/f3j4kfpnttm1o … b.zip?dl=0



Данным скриптом можно заблокировать прокрутку значений в ComboBox-ах

procedure Form1_OnShow (Sender: string; Action: string);
begin
    Form1.OnMouseWheel := @OnMVDMouseWheel;
end;


procedure OnMVDMouseWheel(Sender: TObject; isShift, isAlt, isCtrl: boolean; WheelDelta: Integer; X, Y: Integer; var Handled: Boolean);
begin
    if Form1.ActiveControl is TdbComboBox then Handled := True;
end;

zenja
Для того чтобы создать web интерфейс для доступа к БД, вы должны использовать MySQL для вашего проекта.


Далее на вкладке "Таблицы базы данных" нажимаете кнопку "WebGrid", где вводите данные для доступа к базе данных и нажимаете кнопку "Создать Web таблицу", ее настройка аналогична настройке кнопки с действием "Поиск". Также вы можете создать несколько web таблиц, которые можно будет переключать в браузере через вкладки.


После настройки нажимаете кнопку "Сохранить..." и программа генерирует для вас папку с набором скриптов, которые вам остается загрузить на сервер, открываете файл index.html в браузере и готово.



Здесь можете  найти пример как подключаться к MySQL с помощью скрипта
http://myvisualdatabase.com/forum/viewtopic.php?id=1804


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

3,221

(187 replies, posted in General)

AD1408
Please download latest beta version
https://www.dropbox.com/s/f3j4kfpnttm1o … b.zip?dl=0



Now you can set bookmarks using hot key: Ctrl+Shift+[n], where n = 1...9


Go to bookmark press Ctrl+[n]

Здравствуйте.



Пример

procedure Form1_CheckBox1_OnClick (Sender: string);
begin
    if Form1.CheckBox1.Checked then
    begin
        Form1.ComboBox1.dbFilter := '(id<>1) and  (id<>3)';
        Form1.ComboBox1.dbUpdate;
    end else
    begin
        Form1.ComboBox1.dbFilter := '';
        Form1.ComboBox1.dbUpdate;
    end;
end;

Настроил кнопку отчет, в данном случае необходимо было создать пару вычисляемых полей, т.к. кнопка Отчет не всегда позволяет автоматически правильно связать три последовательные таблицы.


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

6katran6 wrote:

тут можно как то OpenURL('http://mysite/download.html'); при нажатие на кнопку сахарить можно было и суда выбрать а то когда нажимаешь
на кнопу сразу открывается файл ?

К сожалению не понял вопроса, перефразируйте пожалуйста.

Будет проще просто задействовать редактирование и добавление данных непосредственно в гриде. Для этого установите свойства грида
Editable > AllowCreate = True
Editable > AllowEdit = True