1 (edited by kovalenko 2017-11-09 19:02:58)

Topic: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

Всем добрый день!
Не подскажите, как с наименьшими танцами с бубном реализовать поиск/фильтрацию в таблице по принципу - показать все записи (предположим есть категории 1,2,3,4,5) кроме записей категории 5. И второй вопрос, можно-ли и как реализовать фиксацию данной фильтрации, т.е при последующих открытиях базы этот фильтр будет стоять по умолчанию, пока его не отключишь или не поменяешь его условие.
Спасибо!!!

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

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

1. Например так

procedure Form1_bSearch_OnClick (Sender: string; var Cancel: boolean);
begin
    Form1.TableGrid1.dbFilter := 'Category <> 5';
end;



2. Сохранять и читать значение можно из реестра, пример

procedure Form1_OnShow (Sender: string; Action: string);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\Your_project_have',true);
     if reg.ValueExists('CheckBox') then Form1.CheckBox1.Checked := reg.ReadBool('CheckBox');

     reg.CloseKey;
     reg.Free;
end;

procedure Form1_OnClose (Sender: string; Action: string);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\Your_project_have',true);
     reg.WriteBool('CheckBox', Form1.CheckBox1.Checked);
     reg.CloseKey;
     reg.Free;
end;

Проект с примером:

Post's attachments

Attachment icon Registry save and load value.zip 3.67 kb, 460 downloads since 2017-09-18 

Dmitry.

3 (edited by kovalenko 2017-09-20 16:01:13)

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

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

1. Например так

procedure Form1_bSearch_OnClick (Sender: string; var Cancel: boolean);
begin
    Form1.TableGrid1.dbFilter := 'Category <> 5';
end;



2. Сохранять и читать значение можно из реестра, пример

procedure Form1_OnShow (Sender: string; Action: string);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\Your_project_have',true);
     if reg.ValueExists('CheckBox') then Form1.CheckBox1.Checked := reg.ReadBool('CheckBox');

     reg.CloseKey;
     reg.Free;
end;

procedure Form1_OnClose (Sender: string; Action: string);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\Your_project_have',true);
     reg.WriteBool('CheckBox', Form1.CheckBox1.Checked);
     reg.CloseKey;
     reg.Free;
end;

Проект с примером:



1. Например так

procedure Form1_bSearch_OnClick (Sender: string; var Cancel: boolean);
begin
    Form1.TableGrid1.dbFilter := 'Category <> 5';
end;

Дмитрий, а если этот параметр (исключения) находиться в другой таблице и имеет буквенное значение, например: "Готово", "Не готово", "В работе", как тогда правильно оформить скрипт для исключающего фильтра. Как правильно прописать скрипт после :=  ? Да и ещё момент, сам грид работает на вывод инф.по поиску, т.е у него нет своей настройки на какие-либо таблицы, в Setting у меня пусто.

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

kovalenko wrote:
DriveSoft wrote:

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

1. Например так

procedure Form1_bSearch_OnClick (Sender: string; var Cancel: boolean);
begin
    Form1.TableGrid1.dbFilter := 'Category <> 5';
end;



2. Сохранять и читать значение можно из реестра, пример

procedure Form1_OnShow (Sender: string; Action: string);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\Your_project_have',true);
     if reg.ValueExists('CheckBox') then Form1.CheckBox1.Checked := reg.ReadBool('CheckBox');

     reg.CloseKey;
     reg.Free;
end;

procedure Form1_OnClose (Sender: string; Action: string);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\Your_project_have',true);
     reg.WriteBool('CheckBox', Form1.CheckBox1.Checked);
     reg.CloseKey;
     reg.Free;
end;

Проект с примером:



1. Например так

procedure Form1_bSearch_OnClick (Sender: string; var Cancel: boolean);
begin
    Form1.TableGrid1.dbFilter := 'Category <> 5';
end;

Дмитрий, а если этот параметр (исключения) находиться в другой таблице и имеет буквенное значение, например: "Готово", "Не готово", "В работе", как тогда правильно оформить скрипт для исключающего фильтра. Как правильно прописать скрипт после :=  ? Да и ещё момент, сам грид работает на вывод инф.по поиску, т.е у него нет своей настройки на какие-либо таблицы, в Setting у меня пусто.


Всё, разобрался....просто тупил.
frmOrder.GridOrder.dbFilter := '(repairstatus <> "Готово")';

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

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

1. Например так

procedure Form1_bSearch_OnClick (Sender: string; var Cancel: boolean);
begin
    Form1.TableGrid1.dbFilter := 'Category <> 5';
end;



2. Сохранять и читать значение можно из реестра, пример

procedure Form1_OnShow (Sender: string; Action: string);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\Your_project_have',true);
     if reg.ValueExists('CheckBox') then Form1.CheckBox1.Checked := reg.ReadBool('CheckBox');

     reg.CloseKey;
     reg.Free;
end;

procedure Form1_OnClose (Sender: string; Action: string);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\Your_project_have',true);
     reg.WriteBool('CheckBox', Form1.CheckBox1.Checked);
     reg.CloseKey;
     reg.Free;
end;

Проект с примером:

Дмитрий здравствуйте. А можно пример только не с CheckBox, а с Button? И было-бы супер, если при нажатии кнопки менялся её цвет (типа нажата) и это состояние тоже запоминалось. По умолчанию зелёная-нажали и она красная, и соответственно эти состояния запоминаются. И если можно, то как написать оптимальный скрипт, если этих кнопок порядка 10 штук?
Спасибо.

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

kovalenko
К сожалению кнопки не могут изменять цвет. Это можно сделать например в компонентом Panel.
Панелей будет какое то конкретное количество? Или нужен скрипт для разного количества панелей?

Dmitry.

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

kovalenko
К сожалению кнопки не могут изменять цвет. Это можно сделать например в компонентом Panel.
Панелей будет какое то конкретное количество? Или нужен скрипт для разного количества панелей?

Здравствуйте. Планируется порядка 10-12 кнопок/панелей.

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

Проект с примером

Post's attachments

Attachment icon Save panels.zip 5.07 kb, 455 downloads since 2017-09-25 

Dmitry.

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

Проект с примером

Спасибо за оперативность!!!
Пойду изучать.

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

Проект с примером

Дмитрий спасибо, но есть пара вопросов. Панельки у меня каждая имеет свой цвет, как в вашем примере учесть как активный не один цвет, а 10-12. Неактивный может быть и один?
Спасибо!

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

kovalenko wrote:
DriveSoft wrote:

Проект с примером

Дмитрий спасибо, но есть пара вопросов. Панельки у меня каждая имеет свой цвет, как в вашем примере учесть как активный не один цвет, а 10-12. Неактивный может быть и один?
Спасибо!

Дмитрий и ещё один момент. У меня есть скрипты, которые отрабатываю по нажатия на панельку. Попробовал на вашем примере прикрепить скрипт на панельку и глухо. Как я понимаю, всё на себя забирает скрипт по отработке с цветом/состоянием панели.

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

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

Dmitry.

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

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

Ок. Есть разные статусы заказов и панельки помогают фильтровать вывод заявок со статусами - всё кроме, или только выбранне. Хочется чтобы можно было выбрать вывод всех статусов кроме, например "закрыто" и оно (это состояние отфильтрованного статуса) при необходимости сохранялось до последующего изменения. Если о фильтрации вывода "только выбранные статусы", то их сохранение(статуса фильтрации) не актуально.

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

kovalenko wrote:
DriveSoft wrote:

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

Ок. Есть разные статусы заказов и панельки помогают фильтровать вывод заявок со статусами - всё кроме, или только выбранне. Хочется чтобы можно было выбрать вывод всех статусов кроме, например "закрыто" и оно (это состояние отфильтрованного статуса) при необходимости сохранялось до последующего изменения. Если о фильтрации вывода "только выбранные статусы", то их сохранение(статуса фильтрации) не актуально.

У компонента ComboBox есть свойство MultiSelect, установите его значение True, таким образом вы сможете выбирать при поиске, с какими статусами заказы показывать.

Dmitry.

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

Проект с примером

Дмитрий если позволите, вернусь к данной теме. Можно пример для сохранения цвета панелек из формата - панелек предположим 5, активный статус один(цвет статуса), а неактивных цветовых статусов соответственно 5. Как это можно прикрутить к вашему примеру?
Заранее благодарен.

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

Пожалуйста формулируйте вопрос более конкретно.

Dmitry.

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

Пожалуйста формулируйте вопрос более конкретно.

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

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

Пожалуйста формулируйте вопрос более конкретно.

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

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

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

begin
    ....
   
    Form1.Panel1.Tag := clBlue;
    Form1.Panel2.Tag := clYellow;
    Form1.Panel3.Tag := clBlack;
end.

таком образом можете разместить  на форме любое количество панелек

Post's attachments

Attachment icon Save panels2.zip 5.27 kb, 409 downloads since 2017-10-30 

Dmitry.

20 (edited by kovalenko 2017-10-31 06:00:48)

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

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

begin
    ....
   
    Form1.Panel1.Tag := clBlue;
    Form1.Panel2.Tag := clYellow;
    Form1.Panel3.Tag := clBlack;
end.

таком образом можете разместить  на форме любое количество панелек

Спасибо. Всё работает. Дмитрий, если можно последний вопрос/просьба. У меня на панельки при нажатии повешены скрипты двух вариантов

procedure frmOrder_Panel13_OnClick (Sender: string);
begin
   frmOrder.GridOrder.dbFilter := '(repairstatus <> "Принят")';
   frmOrder.GridOrder.dbUpdate;
end;

и второй вариант

procedure frmOrder_Panel2_OnClick (Sender: string);
begin
   frmOrder.cdRepStatus.Caption:='Принят';
   frmOrder.bSearch.Click;
end;

Получается, что цвет панелька меняет, а вот OnClick перестал срабатывать. Можно сделать, что бы OnClick срабатывал  и запоминал состояние статуса, актуально к скрипту варианта

procedure frmOrder_Panel13_OnClick (Sender: string);
begin
   frmOrder.GridOrder.dbFilter := '(repairstatus <> "Принят")';
   frmOrder.GridOrder.dbUpdate;
end;
надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

попробуйте так

procedure PanelOnClick (Sender: TObject);
var
    panel: TdbPanel;
begin
    panel := TdbPanel(Sender);

    if panel.Color <> colorActive then
    begin
        panel.Color := colorActive;
        SavePanelStatus(panel, True);
    end else
    begin
        panel.Color := panel.Tag;
        SavePanelStatus(panel, False);
    end;

   if Sender is Form1.Panel2 Then
   begin
      frmOrder.cdRepStatus.Caption:='Принят';
      frmOrder.bSearch.Click;
   end;

   if Sender is Form1.Panel3 Then
   begin
      frmOrder.GridOrder.dbFilter := '(repairstatus <> "Принят")';
      frmOrder.GridOrder.dbUpdate;
   end;

end;
Dmitry.

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

попробуйте так

procedure PanelOnClick (Sender: TObject);
var
    panel: TdbPanel;
begin
    panel := TdbPanel(Sender);

    if panel.Color <> colorActive then
    begin
        panel.Color := colorActive;
        SavePanelStatus(panel, True);
    end else
    begin
        panel.Color := panel.Tag;
        SavePanelStatus(panel, False);
    end;

   if Sender is Form1.Panel2 Then
   begin
      frmOrder.cdRepStatus.Caption:='Принят';
      frmOrder.bSearch.Click;
   end;

   if Sender is Form1.Panel3 Then
   begin
      frmOrder.GridOrder.dbFilter := '(repairstatus <> "Принят")';
      frmOrder.GridOrder.dbUpdate;
   end;

end;

Спасибо. И как я понимаю вот эти части скрипта

if Sender is Form1.Panel2 Then
   begin
      frmOrder.cdRepStatus.Caption:='Принят';
      frmOrder.bSearch.Click;
   end;

   if Sender is Form1.Panel3 Then
   begin
      frmOrder.GridOrder.dbFilter := '(repairstatus <> "Принят")';
      frmOrder.GridOrder.dbUpdate;
   end;

делаю для всех остальных панелек?

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

попробуйте так

procedure PanelOnClick (Sender: TObject);
var
    panel: TdbPanel;
begin
    panel := TdbPanel(Sender);

    if panel.Color <> colorActive then
    begin
        panel.Color := colorActive;
        SavePanelStatus(panel, True);
    end else
    begin
        panel.Color := panel.Tag;
        SavePanelStatus(panel, False);
    end;

   if Sender is Form1.Panel2 Then
   begin
      frmOrder.cdRepStatus.Caption:='Принят';
      frmOrder.bSearch.Click;
   end;

   if Sender is Form1.Panel3 Then
   begin
      frmOrder.GridOrder.dbFilter := '(repairstatus <> "Принят")';
      frmOrder.GridOrder.dbUpdate;
   end;

end;

Не работает(((

надо идти вперёд....

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

Приложите пожалуйста проект с данным скриптом и опишите, что именно не работает.

Dmitry.

Re: Фильтр - всё кроме. Вопросы-вопросы...Тема закрыта.

DriveSoft wrote:

Приложите пожалуйста проект с данным скриптом и опишите, что именно не работает.

Отправил.

надо идти вперёд....