Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TMS Grid, вместо TStringGrid 
:(
    Опции темы
Akella
  Дата 2.2.2005, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Найдены классные компоненты TMS Grid Pack.
К сожалению они не бесплатны.
Если кто работал с такими компонентами, то пожалуйста выкладываете сюда свои примеры и секреты работы с этими компонентами.
PM MAIL   Вверх
z-END
Дата 2.2.2005, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Цитата(dsergey @ 2.2.2005, 11:41)
К сожалению они не бесплатны.
smile
а вобще кривые они, я сними повозился и плюнул.


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Alex
Дата 2.2.2005, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(z @ 2.2.2005, 12:16)
а вобще кривые они, я сними повозился и плюнул.

Не кривые, а много функциональные.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Akella
  Дата 2.2.2005, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Alex @ 2.2.2005, 12:33)
Не кривые, а много функциональные.


Вообще-то согласен, тоже дума, что кривые, начинаю разбираться (не без помощи Alexa), начинют нравиться.

Но давайте все-таки по теме. smile

Это сообщение отредактировал(а) dsergey - 2.2.2005, 13:10
PM MAIL   Вверх
z-END
Дата 2.2.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Alex
Цитата(dsergey @ 2.2.2005, 13:07)
начинаю разбираться (не без помощи Alexa),

буду рад если это будет проходить не через приват, а так сказать широковещательно! smile


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Akella
Дата 2.2.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Вижу пока мало кто пытался разобраться с этими компонентами.
К стати справка и демо-примеры скудноваты. В примерах задействовано около 2-3 событий из 128!!! возможных!
Скоро начну выкладывать свои примены и наработки.
PM MAIL   Вверх
Akella
Дата 2.2.2005, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Итак, в сетке есть возможно динамически создавать компоненты в ячейках.
Создаем разные компоненты в разных ячецках в событии OnGetEditorType
Код

procedure TfmMain.asg1GetEditorType(Sender: TObject; ACol,
 ARow: Integer; var AEditor: TEditorType);
bagin
Case ACol of//в зависимости от ячейки
    2:begin
         AEditor := edComboList;
         asg1.ClearComboString;
         asg1.AddComboString('р.белая');
         asg1.AddComboString('р.серая');
         asg1.AddComboString('курсив');
         asg1.AddComboString('обычное');
      end;//2
    3:begin
        AEditor := edNormal;
      end;//3
    4:begin
       AEditor := edEditBtn;
      end;//4
 end;//case
end;

возможные варианты для AEditor

Значение
edNormal Edit cell using edit control
edSpinEdit Edit cell using spin edit control
edFloatSpinEdit Edit cell using float spin edit control
edTimeSpinEdit Edit cell using time spin edit control
edDateSpinEdit Edit cell using date spin edit control
edComboEdit Edit cell using default ComboBox control
edComboList Edit cell using ComboList control
edEditBtn Edit cell using edit box with button control
edUnitEditBtn Edit cell using edit box + unit field control
edDateEdit Edit cell using date validated edit control
edButton Edit cell using button control
edNumeric Edit cell using numeric validated edit control
edPositiveNumeric Edit cell using positive numeric validated edit control
edFloat Edit cell using floating point validated edit control
edCapital Edit cell using edit control UPPER CASE only
edMixedCase Edit cell using text validated edit control
edLowerCase Edit cell in all lower case characters
edUpperCase Edit cell in all upper case characters
edTimeEdit Edit cell as time
edDateEditUpDown Edit date with updown button
edPassword Edit as password
edRichEdit Rich text inplace editor
edCustom A custom inplace is used. This is set through the property.
Названия сами за себя говорят, если кому не понятно - спрашивайте.
Добавлено @ 15:24
Как узнать, какое значение попадает в ячейку после закрытия выпадающего списка
Код

procedure TfmMain.asg1ComboCloseUp(Sender: TObject; ARow, ACol: Integer);
begin
 if ACol = 0 then//в первой колонке пользователь выбрал значение
   ShowMessage(asg1.Combobox.Text);
 if (ACol = 1) AND (ARow = 1) then//в ячейке с координатами 1,1 пользователь выбрал значение
   ShowMessage(asg1.Combobox.Text);
end;

PM MAIL   Вверх
Akella
Дата 2.2.2005, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Как узнать активную строку во время редактирования ячейки, в тех случаях, когда нет возможности в прямо в событии узнать, как напрмер ACol, ARow: Integer;
в таких событиях, как OnKeyPress
Код

ActRow:Integer - глобально объявить
procedure TfmMain.asg1SetEditText(Sender: TObject; ACol, ARow: Integer;
 const Value: String);
begin
 ActRow:=aRow;
end;

Применение
Код

Const
iMaxSymbols : Integer = 250;
...
procedure TfmMain.asg1KeyPress(Sender: TObject; var Key: Char);
begin
 statusbar1.SimpleText:=IntToStr(Length(asg1.Cells[3,ActRow]));
 if Length(asg1.Cells[ActCol,ActRow]) >= iMaxSymbols then Key:=#0;
end;

Добавлено @ 15:40
Метод SaveToFile сохраняется в текстовом виде, но обчный TStringGrid корректно этот файл не прочитает, хотя проанализировав его, можн программно прочитать. А сделано грамотно.
Цитата

0,0,№ рубр.
1,0,Район
2,0,Тип
3,0,Текст объявления
4,0,Дни вых.
0,1,101 -район-1комн.из.кв.
1,1,Алекс.
2,1,р.серая
3,1,fghy gfhgdhjgj
4,1,31;1;2;3;4;

Если подумать, то можно понять, что цыфири означают координаты ячейки, далее данные
Добавлено @ 15:41
Как закрасить ячейку или поменять шрифт
Код

procedure TfmMain.asg1GetCellColor(Sender: TObject; ARow, ACol: Integer;
 AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
begin
 if asg1.Cells[ACol,ARow] = 'р.серая' then begin
   ABrush.Color:=clSilver;
 end;
 if asg1.Cells[ACol,ARow] = 'курсив' then begin
    AFont.Style:=[fsItalic];
 end;
end;

Добавлено @ 15:44
Пока всё, спасибо за внимание. Надеюсь будет продолжение. Такую тему можно было и для DBGridEh создать.
PM MAIL   Вверх
Akella
Дата 3.2.2005, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



В свойствах TMouseAction есть свойство AllColumnSize - при изменении ширины одной из колонок сетки, пропорционально меняют ширину все остальные колонки (помучался я с этим свойством)

Это сообщение отредактировал(а) dsergey - 3.2.2005, 17:47
PM MAIL   Вверх
Akella
Дата 10.2.2005, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



В свойстве Navigation есть пункты
AllowInsertRow:bool - добавление новой строки при нажатии Insert на клавиатуре
AllowDeleteRow:bool - удаление активной строки при нажатии Delete на клавиатуре

на програное добавление или удаление строк эти свойства не влияют.



PM MAIL   Вверх
Akella
Дата 14.2.2005, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



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

asg1 - сетка
 asg1.SaveToFile('file.ob');
, то данные этой (редактируемой) ячейки не сохранятся.

для того, что-бы данные ячейки сохранились, нужно выйти из ячеки (можно в другую) или
Код

asg1.Enabled:=False;
asg1.Enabled:=True;
asg1.SaveToFile('file.ob');

PM MAIL   Вверх
fess
Дата 17.2.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

Репутация: 2
Всего: 3



Избавление от надписи о триальной версии в последней строке:
Способ первый:
Просто делаем высоту последней строчки=0 и сообщение, что это триальная версия пропадает. Но это необходимо делать каждый раз при изменении количества строк в AdvStringgrid'е.

М
 
Alex: Публикация кряков запрещена!




В принципе должно работать на всех версиях. Я проверял только на двух последних версиях.

Это сообщение отредактировал(а) Alex - 17.2.2005, 20:57
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
fess
Дата 18.2.2005, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

Репутация: 2
Всего: 3



У этого AdvStringGrid'a есть свойство Look. Если Look:=glXp или Look:=glTMS то на фиксированных строка и колонках появляется неплохой градиент, но его цвет зависит от стиля в винде.
Оказыватся, цвет градиента можно сделать любым при помощи изменения свойств
TMSGradientFrom и TMSGradientTo, но эти свойства не доступны в Инспекторе Объектов, поэтому пришлось долго их искать.
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
Akella
Дата 21.2.2005, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Работаем с TCheckBox

procedure AddCheckBox(ACol, ARow: Integer; State, Data: Boolean);
что есть Data я так и не понял, но понял, что если ставить в False, то при сохранении эта ячека игнорируется.

Еще одно замечание относительно EditorType.
В событии OnGetEditorType не нужно определять ячейки типа edCheckBox (TEditorType.)

читаем файл, ранее сохраненный
od1 - TOpenDialog
asg1 - сама сетка
bCellCecked - переменная типа boolean
Код

 if od1.Execute then begin
   asg1.Clear;
   asg1.LoadFromFile(od1.FileName);
   //шагаем по колонкам в которых нужно устновить CheckBox
   For iCol:=5 to asg1.ColCount-1 do
     //пробегаем по всем строкам, кроме первой - заголовка
     For iRow:=1 to asg1.RowCount-1 do begin
       bCellCecked := false;
       if (asg1.Cells[iCol,iRow]='Y') or ((asg1.Cells[iCol,iRow]='y')) then
         bCellCecked := true;
       asg1.AddCheckBox(iCol,iRow,bCellCecked,true);
     end;

//можно так
 if od1.Execute then begin
   asg1.Clear;
   asg1.LoadFromFile(od1.FileName);
   //шагаем по колонкам в которых нужно устновить CheckBox
   For iCol:=5 to asg1.ColCount-1 do
     //пробегаем по всем строкам, кроме первой - заголовка
     For iRow:=1 to asg1.RowCount-1 do begin
       asg1.AddCheckBox(iCol,iRow,(asg1.Cells[iCol,iRow]='Y') or ((asg1.Cells[iCol,iRow]='y')),true);
     end;


добавлее строки
Код

сначала пишем процедуру

Procedure AddCheckBoxes(iRow:integer);
begin
//колонки с 5-й по 10-ю использую тип CheckBox
 asg1.AddCheckBox(5,iRow,False,true);
 asg1.AddCheckBox(6,iRow,False,true);
 asg1.AddCheckBox(7,iRow,False,true);
 asg1.AddCheckBox(8,iRow,False,true);
 asg1.AddCheckBox(9,iRow,False,true);
 asg1.AddCheckBox(10,iRow,False,true);
end;

использование
 asg1.AddRow;
 AddCheckBoxes(asg1.RowCount-1);



Это сообщение отредактировал(а) dsergey - 21.2.2005, 15:41
PM MAIL   Вверх
Akella
Дата 2.3.2005, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Почему то событие OnGetEditorType происходит дважды подряд
PM MAIL   Вверх
Akella
Дата 19.3.2005, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Пример.
в строке несколько ячеек имеют ComboBox, кадый ComboBox заполняется в зависимости от того, что юзер выбрал в ComboBox`е предыдущей ячейки. Но если все ComboBox`ы заполнены, а юзер опять начал выбирать данные в той же строке, то после выбора значения первого ComboBox`а остальные нужно очистить. Но очисть в том случае, если юзер выбрал новое значение в ComboBox`е.
Есть 2 события ComboCloseUp и ComboOnChange. К сожалению ComboOnChange наступает позже, т.е. после закрытия ComboBox`а. Нам нужно до закрытия, т.к. после закрытия мы уже дожны знать, изменилось значание в ComboBox`е или нет.

Как отследить?

Вводим глобальную переменную
Код

AOldTex:string;

В событии OnClockCell пишем (запоминаем старый текст)
Код

AOldText := asg2.Cells[ACol,ARow];


В событии OnComboCloseUp
Код

asg2 - сетка
  bComboCh := asg2.Combobox.Text <> AOldText;
  if bComboCh then begin
    if (ACol = 0) then begin
      asg2.Cells[ACol+1,ARow]:='';
      asg2.Cells[ACol+2,ARow]:='';
    end;//if (ACol = 0) then begin
    if (ACol = 1) then begin
      asg2.Cells[ACol+1,ARow]:='';
    end;//if (ACol = 0) then begin

    if (ACol = 2) then begin
      asg2.Cells[ACol+1,ARow]:='';
    end;//if (ACol = 0) then begin
  end;//if bComboCh then begin


PM MAIL   Вверх
Akella
Дата 2.6.2005, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Глюк:
Код

код в исходниках (файл BaseGrid)

procedure TBaseGrid.RepaintCell(c, r: integer);
var
  ARect: TRect;
begin
  ARect := CellRect(c,r);
->  InvalidateRect(Handle,@arect,true); <- здесь ошибка
end;



Почему? А может и я не прав. Итак загружаем в сетку данные, затем удаляем одну строку загружаем новые данные, получается последние строки не отрисовывает, мало того вылетает исключение.

Как решить проблему?

Код

код удаления одной строки
asgMain - TTMSGrid

procedure TfmMain.actDelRowExecute(Sender: TObject);
var
  _i,_j,_k: Integer;
  _s:string;
begin
  if (ActRow2 = 0){ or (not asgMain.Focused)}then begin
    ShowMessage('Не выбрана строка ('+IntToStr(ActRow2)+')');
    EXIT;
  end;
  for _k:=0 to asgMain.ColCount-1 do
    _s:=_s+asgMain.Cells[_k,ActRow2];
  if _s <> '' then begin
    if application.MessageBox(PAnsiChar('УДАЛЕНИЕ объявления '+
    'в газету: '+asgMain.cells[ColByName.Gaz,ActRow2]+#13+
    'Рубрика: '+asgMain.cells[ColByName.Rub,ActRow2]+' '+asgMain.cells[ColByName.Obj,ActRow2]+#13+
    'Удалить объявление?'),'ВНИМАНИЕ!',MB_YESNO) = IDYES then
    begin
      _j:=asgMain.Row; // строка с выделением
      asgMain.Rows[_j].Clear;
      for _i:=_j to asgMain.RowCount-2 do
        asgMain.Rows[_i].Assign(asgMain.Rows[_i+1]);
      asgMain.RowCount:=asgMain.RowCount-1;
    end;
  end else begin
    _j:=asgMain.Row; // строка с выделением
    asgMain.Rows[_j].Clear;
    for _i:=_j to asgMain.RowCount-2 do
      asgMain.Rows[_i].Assign(asgMain.Rows[_i+1]);
      asgMain.RowCount:=asgMain.RowCount-1;
  end;//else
  sb1.Panels[1].Text:='строк: '+IntToStr(asgMain.RowCount-1);
  bGridCh:=True;
end;


Код

загрузка
некоторые строки лишние (для отладки)
Procedure TfmMain.LoadFiles;
begin
try
  if not assigned(lvFiles.Selected) then exit;
  asgMain.BeginUpdate;
  asgMain.Clear;
  if bUseTlfFull then begin
    sb1.Panels[2].Text:='Загрузка '+lvFiles.Selected.Caption;
    asgMain.LoadFromFile(lvFiles.Selected.Caption);
  end else begin
    sb1.Panels[2].Text:='Загрузка '+sTlfPath+lvFiles.Selected.Caption+'.ob';
    asgMain.LoadFromFile(sTlfPath+lvFiles.Selected.Caption+'.ob');
  end;
  lbTlf.Text:=lvFiles.Selected.Caption;
  application.ProcessMessages;
  sb1.Panels[2].Text:='Ставим галки';
  application.ProcessMessages;
  if asgMain.ColCount <=0 then begin
    ShowMessage('Ошибка загрузки колонок: '+IntToStr(asgMain.ColCount));
    exit;
  end;

  if asgMain.RowCount <=0 then begin
    ShowMessage('Ошибка загрузки строк: '+IntToStr(asgMain.RowCount));
    exit;
  end;
  CheckBoxes;//ставим галки
  sb1.Panels[2].Text:='Проверка дат и пустых №№ рубрик';
  application.ProcessMessages;
  OutOfDate;//прверка дат
  sb1.Panels[2].Text:='Включаем кнопки';
  application.ProcessMessages;
  actAddRow.Enabled:=True;
  actDelRow.Enabled:=True;
  actQSave.Enabled:=true;
  actClearGrid.Enabled:=true;
  sb1.Panels[1].Text:='строк '+IntToStr(asgMain.RowCount-1);
  asgMain.SelectRange(0,0,1,1);
  sb1.Panels[2].Text:='Готово';
finally
  asgMain.EndUpdate;
  if ActRow2=0 then ActRow2:=1;
end;
end;



Это сообщение отредактировал(а) dsergey - 2.6.2005, 11:17
PM MAIL   Вверх
Akella
Дата 2.6.2005, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



ОШИБКА ИМЕННО В ЭТОЙ ПРОСЕДУРЕ
Код

Procedure TfmMain.CheckBoxes;
Var
 iRow,iCol,ieRow,ieCol:integer;
 bCellCecked:bool;
 setDays:Set of 0..255;
begin
//ShowMessage(IntToStr(asgMain.RowCount-1));
  try
    setDays:=[ColByName.Pn,ColByName.Vt,ColByName.Sr,ColByName.Ch,ColByName.Pt,ColByName.Sb,ColByName.Eks,ColByName.Plat];
    For iRow:=0 to asgMain.RowCount-1 do begin
      ieRow:=iRow;//см.ниже для ShowMessage('Ошибка установки "галки".'+#13+
      if iRow >0 then begin
        For iCol:=0 to asgMain.ColCount-1 do begin
          ieCol:=iCol;//см.ниже для ShowMessage('Ошибка установки "галки".'+#13+
            if iCol in setDays then begin
              bCellCecked := AnsiUpperCase(asgMain.Cells[iCol,iRow])='Y';
              asgMain.AddCheckBox(iCol,iRow,bCellCecked,False);
            end;//if (iCol = ColByName.Pn) or...

        end;//For iCol:=0 to asgMain.ColCount-1 do begin
      end;//if iRow >0 then begin
    end;//for iRow

  except
    ShowMessage('Ошибка установки "галки".'+#13+
    'Строка '+IntToStr(ieRow)+' (включая заголовок)'+#13+
    'Колонка '+IntToStr(ieCol));
  end;//except
end;


PM MAIL   Вверх
Akella
Дата 2.6.2005, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Решил проблему следующим кодом

Код

procedure TfmMain.actDelRowExecute(Sender: TObject);
begin
  if (ActRow2 = 0)then begin
    ShowMessage('Не выбрана строка ('+IntToStr(ActRow2)+')');
    EXIT;
  end;
  asgMain.RemoveRows(ActRow2,1);<- стандартный медот удаления строк
  sb1.Panels[1].Text:='строк: '+IntToStr(asgMain.RowCount-1);
  bGridCh:=True;
end;


PM MAIL   Вверх
Akella
Дата 9.8.2005, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



неужели никто не на работал с эти пакетом?
PM MAIL   Вверх
avp
Дата 21.7.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 21.7.2006

Репутация: нет
Всего: нет



Привет!

несколько примеров для advStringGrid
Код

  SG.Colors[i,rc+5]:=clHighlight; //цвет фона ячейки

  SG.CellProperties[Co,Ro].FontStyle:=[fsItalic]; //стиль шрифта ячейки

  SG.CellProperties[Co,Ro].Alignment:=taRightJustify; //выравниваение в ячейке

  SG.CellProperties[Co,Ro].FontColor:=clWindowText; //цвет шрифта ячейки



Замечание при работе с Nodes - пред закрытием программы, для исключения Invalid Pointer Operation / AViolation их необходимо удалить, например в событии OnClose формы - 

Код


SG.RemoveAllNodes;

 
PM MAIL   Вверх
kostas
Дата 21.7.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 3
Всего: 4



Я тоже работал вплотную с этими компонентами.. Очень понравились, приятный вид и большой функционал.. Что же касается триальности, то пишите в личку ;) 
PM ICQ   Вверх
Akella
Дата 21.7.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



kostas, лучше примеры выкладывай, куски кода, что можно, что нельзя... 
PM MAIL   Вверх
Albinos_x
Дата 21.7.2006, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(Akella @  9.8.2005,  16:27 Найти цитируемый пост)
неужели никто не на работал с эти пакетом?

работал... но такого компанента я у себя в пакете не нашёл... у тебя он на какой закладке?

как-то задавал вопрос по VrScope... никто ничего по нему не сказал... пришлось самому разбираться... 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Foley
Дата 22.7.2006, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фсемба Яцца
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 31.1.2006
Где: Россия, Арх.обл

Репутация: 2
Всего: 7



Цитата(Akella @  9.8.2005,  16:27 Найти цитируемый пост)
неужели никто не на работал с эти пакетом?

я работал, но нормальных примеров у меня к сожалению нету, я пробовал разобраться в демках, кое что получилось, кое что нет, но от противной надписи о том что она триальная мне пришлось пострадать... (отказаться, дальенейшее изучение я посчитал бессмысленным... ибо небыло средств оплатить компанент...) 
PM MAIL ICQ   Вверх
kostas
Дата 23.7.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 3
Всего: 4



Цитата(Akella @  21.7.2006,  16:46 Найти цитируемый пост)
kostas, лучше примеры выкладывай, куски кода, что можно, что нельзя... 

если нужен конкретный пример то могу дать, а так... что выкладывать то даже и не знаю smile) могу отрисовку выложить, делал чтоб строки разными цветами были 
PM ICQ   Вверх
Akella
Дата 24.7.2006, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



ну так выкладывай 
PM MAIL   Вверх
kostas
Дата 24.7.2006, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 3
Всего: 4



Ниже процедурки, которые когда-то писал сам... есть еще много примеров по работе в общем с гридами, однако они есть в том же drkb и смысла здесь их приводить я не вижу..

Вот пример экспорта грида в html:
Код

procedure ToHtml(SG: TStringGrid; S: string);
Var i,j:integer;
    t:TStringList;
begin
  t:=TStringList.Create;  
  try   
   t.Add('<table border="1" align="center" cellspacing="0" rules="all">');  //начало таблицы 

   t.Add('<tr>');  //начало заголовков
   For j:=0 To SG.ColCount-1 Do
    t.Add('<th>'+SG.Cells[j,0]+'</th>');  //заголовки
   t.Add('</tr>');  //конец заголовков

  {ProgressBar1.Max:=SG.RowCount}

   For i:=1 To SG.RowCount Do
    begin
     t.Add('<tr>'); //начало ячеек
     For j:=0 To SG.ColCount-1 Do
      t.Add('<td>'+SG.Cells[j,i]+'</td>');  //ячейки
     t.Add('</tr>'); //конец ячеек
    {ProgressBar1.Position:=i}
    end;

    t.Add('</table>');  //конец таблицы
    t.SaveToFile(S); //сохраняем в файл

   {ProgressBar1.Position:=0}
  finally
   t.Free;
  end;
end;


сортировка по любой колонке:
Код

procedure SortGrid(SG: TStringGrid; Column: Integer);
var
    MinRowId, RowId1, RowId2, ColId: Integer;
    Temp1, Temp2: string;
begin
  for RowId1 := 1 to SG.RowCount - 2 do
   begin
    Temp1 := SG.Cells[Column , RowId1];
    MinRowId := RowId1;
    for RowId2 := RowId1 + 1 to SG.RowCount - 1 do
     begin
      Temp2 := SG.Cells[Column, RowId2];
      if Temp2 < Temp1 then
       begin
        Temp1 := SG.Cells[Column, RowId2];
        MinRowId := RowId2;
       end;
     end; 

    for ColId := 1 to SG.ColCount - 1 do
     begin
      Temp2 := SG.Cells[ColId, RowId1];
      SG.Cells[ColId, RowId1] := SG.Cells[ColId, MinRowId];
      SG.Cells[ColId, MinRowId] := Temp2;
     end;
   end;
end;


раскраска последней ячейки последнего столбца в красный цвет и выравнивание во всех других ячейках по правому краю:
Код

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if ACol=StringGrid1.ColCount-1 then
   StringGrid1.Canvas.Font.Color:=clRed;

  if ARow=StringGrid1.RowCount-1 then
   StringGrid1.Canvas.Font.Color:=clRed;

  If (ACol > 0) and (ARow>0) then
   begin
    StringGrid1.canvas.fillRect(Rect);
    StringGrid1.canvas.TextOut(rect.Right-canvas.TextWidth(StringGrid1.Cells[ACol,ARow])+length(StringGrid1.Cells[ACol,ARow])-5,Rect.Top+2,StringGrid1.Cells[ACol,ARow]);
   end;
end; 


и еще в аттаче небольшой примерчик по работе с TStringGrid, для кого то делал когда то 

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  StringGrid_work.zip 29,74 Kb
PM ICQ   Вверх
Akella
Дата 26.7.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



на сайте разработчиков пакета FIBPlus (http://www.devrace.com/) выложен пример
Цитата

демо пример интеграции FIBPlus и TMSAdvDBGrid (TMS Component Studio)

см. новости за 25.07.2006

Добавлено @ 11:52 
http://www.devrace.com/files/tmsadvgrid_2....ibplus_6.45.exe 
PM MAIL   Вверх
Akella
Дата 3.10.2006, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



примеры

Присоединённый файл ( Кол-во скачиваний: 41 )
Присоединённый файл  tms_DASGDEMOS.ZIP 540,71 Kb
PM MAIL   Вверх
Akella
Дата 3.10.2006, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



примеры2

Добавлено @ 10:08 
думаю, что ты не найдёшь описания или справки для TMS

Присоединённый файл ( Кол-во скачиваний: 44 )
Присоединённый файл  tms_DBADVGRIDSAMPLES.ZIP 470,00 Kb
PM MAIL   Вверх
tigger
Дата 21.10.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

Репутация: нет
Всего: 4



AdvStringGrid выолжите хоть где-нибудь посмотреть бы его...


--------------------
user posted image
PM MAIL   Вверх
RA
Дата 21.10.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115






tigger, иди на офф сайт там смотри, или качай с ru-board.com, у нас варез запрещён.
PM   Вверх
Akella
Дата 23.10.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



tiggerвот, смотри.

там и примеры есть внизу

Добавлено @ 09:05 
поищи там демо-версии
PM MAIL   Вверх
PriZraK
Дата 1.6.2009, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



Здравствуйте.
Ищу сорцы данного демо-приложения:
user posted image
Среди демо-приложений архива DASGDemos.zip этот пример не нашёл.
Дело в том что необходимо отразить сообщение (Hint) над определённой строкой, либо в виде баллона (Balloon), либо в виде прямоугольного сообщения (OfficeHint). Так как среди значений компонента TAdvStringGrid есть такие как:
  • AdvStringGrid.BalloonInit
  • AdvStringGrid.BalloonDone
  • AdvStringGrid.Balloon
  • AdvStringGrid.OfficeHint
следовательно их как то можно применить и вызывать в определённом месте компонента.
Остаётся задать вопрос — как это сделать?

Это сообщение отредактировал(а) PriZraK - 1.6.2009, 23:18
PM MAIL ICQ Skype GTalk   Вверх
Akella
Дата 2.6.2009, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Может проблема в том, что на изображении в примере более новая версия грида, чет у тебя в наличии или в примере?
PM MAIL   Вверх
PriZraK
Дата 3.6.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



Цитата(Akella @ 2.6.2009,  08:13)
Может проблема в том, что на изображении в примере более новая версия грида, чет у тебя в наличии или в примере?

Установлен TMS Component pack v5.1.0.2 (Май 6, 2009). 
Версия входящего в пак TAdvStringGrid — 4.5.0.2.
PM MAIL ICQ Skype GTalk   Вверх
Akella
Дата 3.6.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



PM MAIL   Вверх
ActioN
Дата 23.6.2009, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 12.4.2005

Репутация: нет
Всего: нет



А кто-нибудь знает, как сделать чтобы в определенной колонке всегда был виден SpinEdit (UpDown) контрол - как на картинке, предложенной PriZraK в колонке Stock? Если делать вот так:
Код

if (ACol == 3)
AEditor = edSpinEdit;

То контрол будет виден только если начать редактировать ячейку. После редактирования его снова не видно.
PM MAIL WWW   Вверх
Akella
Дата 24.6.2009, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Может поискать свойство типа AlwaysShowEditor или что-то в этом роде.
PM MAIL   Вверх
ActioN
Дата 25.6.2009, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 12.4.2005

Репутация: нет
Всего: нет



Akella, перепробовал все возможные свойства, которые в названии хоть как-то имеют отношение - не нашел. Слишком их много. Демки тоже пересмотрел и тоже ничего такого не нашел. Ни в одной демке не нашел создания SpinEdit в ячейке.
PM MAIL WWW   Вверх
Dizzzy Dozzzer
Дата 26.1.2010, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



Цитата(ActioN @ 23.6.2009,  07:04)
А кто-нибудь знает, как сделать чтобы в определенной колонке всегда был виден SpinEdit (UpDown) контрол - как на картинке, предложенной PriZraK в колонке Stock? Если делать вот так:
Код

if (ACol == 3)
AEditor = edSpinEdit;

То контрол будет виден только если начать редактировать ячейку. После редактирования его снова не видно.

grid.ControlLook.SpinButtonsAlwaysVisible := true

Добавлено через 11 минут и 29 секунд
Цитата(PriZraK @ 1.6.2009,  21:13)
Здравствуйте.
Дело в том что необходимо отразить сообщение (Hint) над определённой строкой, либо в виде баллона (Balloon), либо в виде прямоугольного сообщения (OfficeHint). Так как среди значений компонента TAdvStringGrid есть такие как:

  • AdvStringGrid.BalloonInit
  • AdvStringGrid.BalloonDone
  • AdvStringGrid.Balloon
  • AdvStringGrid.OfficeHint
следовательно их как то можно применить и вызывать в определённом месте компонента.
Остаётся задать вопрос — как это сделать?

procedure AddBalloon(ACol,ARow: Integer; Title, Text:string; Icon: TBalloonIcon);

Варианты Icon:
  biNone: no icon 
  biInfo: information icon 
  biWarning: warning icon 
  biError: error icon

ЗЫ не забудь:
  grid.Balloon.Enable := true
PM MAIL   Вверх
Slan
Дата 6.5.2010, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 29.3.2010

Репутация: нет
Всего: нет



 
 Дабы оживить тему...

 Сталкивался кто с реализацией создания в ячейках TMSGrid'ов элементов CheckComboBox стандартными средствами TMS? Вроде для этих целей есть компонента CheckEditLink, но как с ней работать пока не понятно.

 Заранее благодарен

 
 

Это сообщение отредактировал(а) Slan - 6.5.2010, 11:46
PM MAIL   Вверх
Slan
Дата 19.5.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 29.3.2010

Репутация: нет
Всего: нет



 
 И весьма интересно:  а есть ли возможность сделать такой же фильтр как был в примере, который показывал PriZraK? Если кто знает способ создания просьба поделиться им)
PM MAIL   Вверх
Akella
Дата 19.5.2010, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



По идее, его "делать" не нужно, он, как бы встроен должен быть. Посмотри свойства грида.

Добавлено через 17 секунд
Может у тебя не та версия грида?
PM MAIL   Вверх
Slan
Дата 19.5.2010, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 29.3.2010

Репутация: нет
Всего: нет



 По логике то да и там есть подобие, только вот именно что подобие того на скрине. Да, есть группа свойств, посредством которых можно создать фильтр в popup меню, но не тот) В доках тоже темно и грустно, описывается лишь часть, а остальное - догадывайтесь сами...
Недавно начал осваивать TMS, вот и проявляю интерес к таким неплохим у удобным, на мой взгляд, деталям.

Кстати, по первому вопросу тоже нету соображений\предложений?

по поводу версии... грид версии 5.0.4.1, сам пак - 5.5.2


PM MAIL   Вверх
Akella
Дата 20.5.2010, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Slan @  19.5.2010,  14:11 Найти цитируемый пост)
Недавно начал осваивать TMS, 

Переходи пока не поздно на DevExpress smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1916 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.