Доработки Rx
Модераторы: alexs, Модераторы
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Доработки Rx
Доработал поиск в RxDBGrid - теперь есть возможность искать по всем колонкам.
Re: Доработки Rx
Алексей, будет время, добавь пож-та в модуль rxdbgrid в функции
function TRxColumnGroupParam.GetGroupTotal: string;
function TRxColumnFooterItem.GetStatTotal: string;
формат поля ftFMTBcd для подсчета итоговых значений.
А то zeos усердно внедряет эти типы полей.
function TRxColumnGroupParam.GetGroupTotal: string;
function TRxColumnFooterItem.GetStatTotal: string;
формат поля ftFMTBcd для подсчета итоговых значений.
А то zeos усердно внедряет эти типы полей.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Доработки Rx
Готово - проверяй
ревизия 7173.
ревизия 7173.
Re: Доработки Rx
Чтоб уйти от проблеми с масштабированием помогает Application.Scaled := False
function TRxIniPropStorage.DoReadString(const Section, Ident,
DefaultValue: string): string;
var
S: String;
ASize: LongInt;
ASize1: Integer;
begin
Result := inherited DoReadString(Section, Ident, DefaultValue);
if not(Application.Scaled) then Exit;
{$IfNDef FIX_WIDTH_WIDE_STRING96}
S:=UpperCase(Ident);
function TRxIniPropStorage.DoReadString(const Section, Ident,
DefaultValue: string): string;
var
S: String;
ASize: LongInt;
ASize1: Integer;
begin
Result := inherited DoReadString(Section, Ident, DefaultValue);
if not(Application.Scaled) then Exit;
{$IfNDef FIX_WIDTH_WIDE_STRING96}
S:=UpperCase(Ident);
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Доработки Rx
Ну это совсем костыль 
В принципе идеи есть как победить - но надо проверять.
Как будет время - попробую позаниматься.
Там есть логика - когда надо перекодировать ширину/высоту для масштабирования, а когда нет.
В принципе идеи есть как победить - но надо проверять.
Как будет время - попробую позаниматься.
Там есть логика - когда надо перекодировать ширину/высоту для масштабирования, а когда нет.
Re: Доработки Rx
Я может глупость спрошу, но (просто не пользуюсь пакетом).
В пакете нет случайно компонентов, реализующих какой-нибудь интерфейс проверки корректности вводимых в них данных и визуально оповещающих об этом. Например, TEdit, горящий красным, если вводится ересь. Календарь без введенной даты тоже например. Лень писать, вдруг есть)
В пакете нет случайно компонентов, реализующих какой-нибудь интерфейс проверки корректности вводимых в них данных и визуально оповещающих об этом. Например, TEdit, горящий красным, если вводится ересь. Календарь без введенной даты тоже например. Лень писать, вдруг есть)
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Доработки Rx
Есть компонент, который проверяет на заполненность данных (не пустые)
Особенно актуально для DBEdit-ов (да и вообще всех DBxxx) компонент.
В принципе там есть событие на ручную проверку - через обработчик
Сообщение об ошибке выдаётся при закрытии формы (форму не даст закрыть) и выборе элемента с ошибочным контролом.
В качестве бонуса понимает метки (TLabel), привязанные к контролам - берёт оттуда название контрола.
Выделение цветом - не делал. Давай код - добавлю.
Особенно актуально для DBEdit-ов (да и вообще всех DBxxx) компонент.
В принципе там есть событие на ручную проверку - через обработчик
Сообщение об ошибке выдаётся при закрытии формы (форму не даст закрыть) и выборе элемента с ошибочным контролом.
В качестве бонуса понимает метки (TLabel), привязанные к контролам - берёт оттуда название контрола.
Выделение цветом - не делал. Давай код - добавлю.
Re: Доработки Rx
DB-компоненты не хочу. Ладно, подумаю, как лучше. Идея была такая: каждая форма (или фрейм), позволяющая редактировать данные, имеет свойство, например, valid, или nored, как нравится. При закрытии метод чтения этого свойства пробегается по всем контролам на форме (фрейме), которые реализуют обозначенный интерфейс, читает их аналогичное свойство-boolean функцию, если не true, то кидает фокус на этот контрол, вызывает у него хинт "неверное значение" и не дает закрыться, отправляя в result = false.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Доработки Rx
Так оно практически так и есть
Не визуальный контрол - в нем заполняешь коллекцию с контролами, которые надо валидировать.
По умолчанию валидация идёт на ввод значения в контрол.
Если надо более сложное - у каждого элемента коллекции есть событие - валидатор. Туда пишешь свою логику.
При закрытии не даёт закрыть если хотябы один из элементов не валидный. Фокус ввода устанавливаеся на нужный элемент и выдаётся сообщение. PageControl и фрэймы при валидации обрабатывается.
Не визуальный контрол - в нем заполняешь коллекцию с контролами, которые надо валидировать.
По умолчанию валидация идёт на ввод значения в контрол.
Если надо более сложное - у каждого элемента коллекции есть событие - валидатор. Туда пишешь свою логику.
При закрытии не даёт закрыть если хотябы один из элементов не валидный. Фокус ввода устанавливаеся на нужный элемент и выдаётся сообщение. PageControl и фрэймы при валидации обрабатывается.
Re: Доработки Rx
Леш, здесь на основном FP-форуме один перец выложил патч. Суть его проблемы в том, что нельзя напрямую редактировать ячейку грида, если соответствующее поле датасета пустое. Ну и там, по мелочи. Оригинал сообщения здесь
https://forum.lazarus.freepascal.org/in ... cseen.html
На всякий пожарный прикладываю его патч в аттаче
https://forum.lazarus.freepascal.org/in ... cseen.html
На всякий пожарный прикладываю его патч в аттаче
- Вложения
-
- TRxDBGridDateEditorEditChange.7z
- (858 байт) 979 скачиваний
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Доработки Rx
Спасибо
Посмотрю
Добавлено спустя 14 минут 18 секунд:
Я не могу понять его проблему - всё прекрасно вводится на пустом датасете с пустыми полями.
Посмотрю
Добавлено спустя 14 минут 18 секунд:
Я не могу понять его проблему - всё прекрасно вводится на пустом датасете с пустыми полями.
Re: Доработки Rx
Хм, лучше выяснить это у топикстартера по выше приведенной ссылке. Не парься насчёт буржуйского, я сам вовсю переводчиком пользуюсь 
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Доработки Rx
В RxDBGrid для колонки добавил поле PopUpMenu - чтобы можно было индивидуально настраивать всплывающие меню для колонок таблицы
Re: Доработки Rx
Приветствую!
Решил написать здесь, так как прикладываю как бы "доработку"
В общем проблема с поиском!
Решил исправить немного. При вызове формы поиска по Ctrl+F в форме каждый раз надо выставлять галочки, надоело, решил проставить их в зависимости от того как настроен грид.
Также при направлении поиска rsdAll поиск находя первый результат останавливался на нем и при нажатии на кнопку "искать далее" дальше ни чего не искал. Поправил как мог - вроде работает. Только не сообразил как бы сделать этот поиск по кругу, было бы ещё лучше!
Решил написать здесь, так как прикладываю как бы "доработку"
В общем проблема с поиском!
Решил исправить немного. При вызове формы поиска по Ctrl+F в форме каждый раз надо выставлять галочки, надоело, решил проставить их в зависимости от того как настроен грид.
Также при направлении поиска rsdAll поиск находя первый результат останавливался на нем и при нажатии на кнопку "искать далее" дальше ни чего не искал. Поправил как мог - вроде работает. Только не сообразил как бы сделать этот поиск по кругу, было бы ещё лучше!
Код: Выделить всё
Index: rxdbgrid_findunit.pas
===================================================================
--- rxdbgrid_findunit.pas (revision 7987)
+++ rxdbgrid_findunit.pas (working copy)
@@ -60,7 +60,9 @@
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
+ procedure RadioGroup1SelectionChanged(Sender: TObject);
private
+ FirstSearch: Boolean;
FGrid:TRxDBGrid;
FDataSet:TDataSet;
procedure SetGrid(AGrid:TRxDBGrid);
@@ -121,6 +123,12 @@
ComboBox1.Enabled:=RadioButton1.Checked;
end;
+procedure TrxDBGridFindForm.RadioGroup1SelectionChanged(Sender: TObject);
+begin
+ if RadioGroup1.ItemIndex = 0 then
+ FirstSearch:=True;
+end;
+
procedure TrxDBGridFindForm.BtnFindClick(Sender: TObject);
var
FieldName, S:string;
@@ -152,6 +160,11 @@
{$ELSE}
P:=FDataSet.Bookmark;
{$ENDIF}
+ If SearchOrigin = rsdAll Then
+ If FirstSearch then
+ FDataSet.First
+ else
+ FDataSet.Next;
if SearchOrigin = rsdForward then
FDataSet.Next
else
@@ -180,6 +193,7 @@
if not R then
FDataSet.Bookmark:=P;
{$ENDIF}
+ FirstSearch := False;
end;
end;
end;
@@ -200,6 +214,8 @@
end;
ComboBox1.ItemIndex:=ComboBox1.Items.IndexOf(AGrid.SelectedColumn.Title.Caption);
+ CheckBox1.Checked := Not (loCaseInsensitive In AGrid.SearchOptions.QuickSearchOptions);
+ CheckBox2.Checked := loPartialKey In AGrid.SearchOptions.QuickSearchOptions;
end;
FDataSet:=nil;
Код: Выделить всё
Index: rxdbutils.pas
===================================================================
--- rxdbutils.pas (revision 7987)
+++ rxdbutils.pas (working copy)
@@ -539,8 +539,6 @@
try
if SearchOrigin in [rsdAll, rsdForward] then
begin
- if SearchOrigin = rsdAll then
- DataSet.First;
while not DataSet.EOF do
begin
Result := CompareRecord;
Последний раз редактировалось ssadragon 12.04.2021 08:16:14, всего редактировалось 1 раз.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Доработки Rx
Спасибо. Посмотрю.
