RxFPC - новая версия

Модераторы: alexs, Модераторы

Сообщение alexs » 18.04.2008 11:36:37

Кстати, в догонку о LookupDisplayIndex - если оно превышает кол-во полей для отображения что лучше сделать?

Отображать первое поле? или вобще ничего не отображать?

VAshot писал(а):Может просто расшарить свойства таблички для LookUp'ов?

Тогда это всё можно будет задавать напрямую

Сам грид не существует всё время - он создаётся только в момент выпадения списка. Именно поэтому я и сделал клас-обёртку. Ибо расточительно дюже держать в памяти столько гридов.

VAshot писал(а):Еще б туда возможность изменения типа отображения ScrollBar'ов:

Ну если очень хочется - то можно сделать. Что ещё?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4054
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение VAshot » 18.04.2008 11:49:09

Про скролы: думаю хватит строки
Result.FGrid.ScrollBars:=ssAutoBoth;
без вынесения в свойства, с трудом представляю когда нужно другое.

А вот приоритет и размеры - хорошо бы.
Как вариант, можно и авторазмер PopUp'а по ширине.

Сейчас для себя сделал следующее (особым разнообразием мои потребности не отличаются):
Код: Выделить всё
  Result.FGrid.AutoFillColumns:=false;     
  Result.FGrid.ScrollBars:=ssAutoBoth;   
  Result.FGrid.OptimizeColumnsWidthAll;
  if Result.FGrid.Columns.Count > 1 then
    Result.FGrid.Columns.Items[Result.FGrid.Columns.Count-1].SizePriority:=0; 
  Result.FGrid.AutoFillColumns:=true;     





В Гриде:
вот такое работает
Код: Выделить всё
RxDBGrid1.ColumnByFieldName().Footer

а вот такое нет:
Код: Выделить всё
RxDBGrid1.Columns.Items[i].Footer


Вроде один и тот же объект, а доступность свойств отличается от способа доступа....
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Сообщение ViTality » 18.04.2008 12:00:13

Чтобы дапрграмно задлать значени - присваивай значение полю из DataField.

спс. ну в принципе так и делал. мне это показалось затычкой.
Насчёт пустого - есть тма глюк - очищается поле по ESC, а вот чтобы не портилось пустое - никак руки не дойдут сделать

может стоит сделать чтоб можно было указать номер записи отображаемой по умолчанию вместо EmptyValue
(у меня просто нет таких форм с пустыми полями).

посмотри в своем проекте "Управление проектами". На закладке Справочники добавь сотрудника без указания организации. а потом еще раз открой его на редактирование. и увидишь что огранизация у него стоит та которая была у записи под курсором при создании. (Вообще спасибо что выложил исходники этого проекта, я там многое подсмотрел :wink: )

Кстати, в догонку о LookupDisplayIndex - если оно превышает кол-во полей для отображения что лучше сделать?

думаю лучше ничего или последнее.
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение alexs » 18.04.2008 12:57:38

ViTality писал(а):посмотри в своем проекте "Управление проектами"

Я в нём не завожу сотрудников без организации :-).
ViTality писал(а):думаю лучше ничего или последнее

Так что именно? :-)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4054
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение ViTality » 18.04.2008 13:15:10

Так что именно?

последнее
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение alexs » 18.04.2008 13:56:34

Залил на SVN подержку для TRxDBLookupCombo.DropDownCount
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4054
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение ViTality » 18.04.2008 14:08:58

ура, ура, ура. опробуем...
вроде все гут :)
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение VAshot » 18.04.2008 14:26:54

Вот так, на мой взгляд, лучше:
Код: Выделить всё
****ShowRxDBPopUpForm
  Result.FGrid.ScrollBars:=ssVertical;
  Result.FGrid.AutoFillColumns:=false;
  Result.FGrid.OptimizeColumnsWidthAll;
//  for i:=0 to Result.FGrid.Columns.Count-1 do
//    Result.FGrid.Columns.Items[1].SizePriority:=Result.FPopUpFormOptions.Columns.Items[i].SizePriority;

  w:=0;
  for i:=0 to Result.FGrid.Columns.Count-1 do
    w:=w+Result.FGrid.Columns.Items[i].Width+20;    //20 - ширина scrolla

  if w < Result.FPopUpFormOptions.DropDownWidth then begin
    Result.FGrid.AutoFillColumns:=APopUpFormOptions.AutoFillColumns;
  end
  else begin
    if w>500 then begin
      w:=500;
      Result.FGrid.ScrollBars:=ssBoth;
    end;
    Result.FPopUpFormOptions.DropDownWidth:=w;
    Result.FGrid.Width:=Result.FPopUpFormOptions.DropDownWidth;
    Result.FGrid.AutoFillColumns:=APopUpFormOptions.AutoFillColumns;
    {Сюда надо что-то дописать, а то правильно начинает отображаться только посе второго вызова PopUp};
  end;


Именно в ShowRxDBPopUpForm, т.к. ранее узанть ширину текста нельзя.

Вот это не работает (свойство SizePriority прописал), никто ж не создавал эти колонки
Код: Выделить всё
Result.FGrid.Columns.Items[1].SizePriority:=Result.FPopUpFormOptions.Columns.Items[i].SizePriority;


где прописать бы эти свойства? чтоб можно было из основной програмы ими управлять?
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Сообщение alexs » 18.04.2008 15:10:16

1. Почему скрол прибовляется к каждому столбцу?
2. Честно говоря мне больше нравится, когда выпадающий список имеет ширину лукапа.
3. Что нибудь подумаю.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4054
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение VAshot » 18.04.2008 15:49:36

1. Потому, что скрол отнимает место у ячеек, таблица должна быть=сумма ячеек + скрол, если есть, ну и границы.
2. Минимальная ширина - да, а когда текст не помещается - не слишком красиво (особенно когда растянуть нельзя).

Вот так лучше:

Код: Выделить всё
function ShowRxDBPopUpForm(AControl:TWinControl; ADataSet:TDataSet;
  AOnPopUpCloseEvent:TPopUpCloseEvent; APopUpFormOptions:TPopUpFormOptions;
  AFieldList:string; ALookupDisplayIndex, BtnWidtn: integer; const Font:TFont):TPopUpForm;
var
  i, w, ww: Integer;
begin
  Result:=TPopUpForm.CreatePopUp(AControl, APopUpFormOptions, AFieldList, BtnWidtn);
  Result.FOnPopUpCloseEvent:=AOnPopUpCloseEvent;
  Result.DataSet:=ADataSet;

//---------------------------------------------------- VAshot
  ww:=Result.FPopUpFormOptions.DropDownWidth;
 
  Result.FGrid.ScrollBars:=ssVertical;
  Result.FGrid.AutoFillColumns:=false;
 
  if Result.FPopUpFormOptions.DropDownWidth<Result.Width then begin
    Result.FPopUpFormOptions.DropDownWidth:=Result.Width;
  end;

  w:=0;
  for i:=0 to Result.FGrid.Columns.Count-1 do
    w:=w+Result.FGrid.Columns.Items[i].Width;

  if Result.FPopUpFormOptions.AutoFillColumns then begin
    Result.FGrid.OptimizeColumnsWidthAll;
  //  for i:=0 to Result.FGrid.Columns.Count-1 do
    if Result.FGrid.Columns.Count > 1 then
      Result.FGrid.Columns.Items[1].SizePriority:=0;

    w:=0;
    for i:=0 to Result.FGrid.Columns.Count-1 do
      w:=w+Result.FGrid.Columns.Items[i].Width;

    if w = Result.FPopUpFormOptions.DropDownWidth then begin
    end;

    if w < Result.FPopUpFormOptions.DropDownWidth then begin
      w:=Result.FPopUpFormOptions.DropDownWidth;
      Result.FGrid.AutoFillColumns:=APopUpFormOptions.AutoFillColumns;
    end;

    if w > Result.FPopUpFormOptions.DropDownWidth then begin
      Result.FPopUpFormOptions.DropDownWidth:=w+20;     //20 - ширина scrolla

      Result:=TPopUpForm.CreatePopUp(AControl, Result.FPopUpFormOptions, AFieldList, BtnWidtn);
      Result.FOnPopUpCloseEvent:=AOnPopUpCloseEvent;
      Result.DataSet:=ADataSet;

      Result.FGrid.AutoFillColumns:=false;
      Result.FGrid.OptimizeColumnsWidthAll;
    //  for i:=0 to Result.FGrid.Columns.Count-1 do
      if Result.FGrid.Columns.Count > 1 then
        Result.FGrid.Columns.Items[1].SizePriority:=0;
      Result.FGrid.AutoFillColumns:=APopUpFormOptions.AutoFillColumns;
      Result.FGrid.ScrollBars:=ssVertical;
    end;
  end;
 
  if w > Result.FPopUpFormOptions.DropDownWidth+20 then
    Result.FGrid.ScrollBars:=ssBoth;
//----------------------------------------------------
  Result.LookupDisplayIndex:=ALookupDisplayIndex;
  Result.LookupDisplayIndex:=ALookupDisplayIndex;

  if Assigned(Font) then
  begin
    Result.FGrid.Font.Assign(Font);
//    Result.Font.Assign(Font);
  end;

{$IFDEF LINUX}
  if Result.ShowModal = mrOk then
    if Assigned(AOnPopUpCloseEvent) then
      AOnPopUpCloseEvent(true);
  Result.Free;
  Result:=nil;
{$ELSE  LINUX}
  Result.Show;
  Result.FGrid.UpdateActive;
{$ENDIF LINUX}

  Result.FPopUpFormOptions.DropDownWidth:=ww;
end;


А вот как передать значения SizePriority или ширины колонок......
Последний раз редактировалось VAshot 18.04.2008 17:16:15, всего редактировалось 1 раз.
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Сообщение VAshot » 18.04.2008 17:15:32

Исправил косячки, правда код коряв и не оптимален :( уж точно.
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Re: RxFPC - новая версия

Сообщение VAshot » 14.05.2008 14:16:01

В WhatsNew сказано, что доработа отрисовка маркера сортировки в гриде. А как оно (показ маркера) включается, активизируется?
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Re: RxFPC - новая версия

Сообщение alexs » 14.05.2008 17:36:06

либо назначай обработчик для события OnGetBtnParam
либо используй прослойку для автосортировки (для примера смотри файл exsortfb.pas).
Для FBDataSet, RxMemDataSet, tmemdataset и также ZeosQuery это уже есть. Если что-то другое - дописывай.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4054
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxFPC - новая версия

Сообщение alexs » 01.09.2008 17:31:41

Проверьте, кто сейчас на винде - изменил код для выравнивания кнопок на панели инструментов - работает нормально?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4054
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxFPC - новая версия

Сообщение Brainenjii » 16.10.2008 08:40:08

Если имеется в виду TToolPanel - то не понял, где там выравнивание ^_^ Но если добавить несколько в Items, а потом попытаться удалить TToolPanel - вылезет AV.
И ещё - heaptrc ругается на pickdate, если положить RxDateEdit на форму.
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Пред.След.

Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru