Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TMS Grid


Автор: Akella 2.2.2005, 11:41
Найдены классные компоненты TMS Grid Pack.
К сожалению они не бесплатны.
Если кто работал с такими компонентами, то пожалуйста выкладываете сюда свои примеры и секреты работы с этими компонентами.

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

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

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

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


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

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

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

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

Автор: Akella 2.2.2005, 13:40
Вижу пока мало кто пытался разобраться с этими компонентами.
К стати справка и демо-примеры скудноваты. В примерах задействовано около 2-3 событий из 128!!! возможных!
Скоро начну выкладывать свои примены и наработки.

Автор: Akella 2.2.2005, 15:18
Итак, в сетке есть возможно динамически создавать компоненты в ячейках.
Создаем разные компоненты в разных ячецках в событии 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;

Автор: Akella 2.2.2005, 15:35
Как узнать активную строку во время редактирования ячейки, в тех случаях, когда нет возможности в прямо в событии узнать, как напрмер 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 создать.

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

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

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



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

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

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

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

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

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




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

Автор: fess 18.2.2005, 13:04
У этого AdvStringGrid'a есть свойство Look. Если Look:=glXp или Look:=glTMS то на фиксированных строка и колонках появляется неплохой градиент, но его цвет зависит от стиля в винде.
Оказыватся, цвет градиента можно сделать любым при помощи изменения свойств
TMSGradientFrom и TMSGradientTo, но эти свойства не доступны в Инспекторе Объектов, поэтому пришлось долго их искать.

Автор: Akella 21.2.2005, 14:44
Работаем с 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);


Автор: Akella 2.3.2005, 10:10
Почему то событие OnGetEditorType происходит дважды подряд

Автор: Akella 19.3.2005, 11:29
Пример.
в строке несколько ячеек имеют 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


Автор: Akella 2.6.2005, 10:57
Глюк:
Код

код в исходниках (файл 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;


Автор: Akella 2.6.2005, 12:44
ОШИБКА ИМЕННО В ЭТОЙ ПРОСЕДУРЕ
Код

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;


Автор: Akella 2.6.2005, 13:07
Решил проблему следующим кодом

Код

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;


Автор: Akella 9.8.2005, 16:27
неужели никто не на работал с эти пакетом?

Автор: avp 21.7.2006, 13:49
Привет!

несколько примеров для 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;

 

Автор: kostas 21.7.2006, 15:21
Я тоже работал вплотную с этими компонентами.. Очень понравились, приятный вид и большой функционал.. Что же касается триальности, то пишите в личку ;) 

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

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

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

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

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

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

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

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

Автор: Akella 24.7.2006, 08:58
ну так выкладывай 

Автор: kostas 24.7.2006, 11:13
Ниже процедурки, которые когда-то писал сам... есть еще много примеров по работе в общем с гридами, однако они есть в том же 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, для кого то делал когда то 

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

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

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

Добавлено @ 11:52 
http://www.devrace.com/files/tmsadvgrid_2.9.1.0_fibplus_6.45.exe 

Автор: Akella 3.10.2006, 10:03
примеры

Автор: Akella 3.10.2006, 10:04
примеры2

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

Автор: tigger 21.10.2006, 13:39
AdvStringGrid выолжите хоть где-нибудь посмотреть бы его...

Автор: RA 21.10.2006, 15:20



tigger, иди на офф сайт там смотри, или качай с ru-board.com, у нас варез запрещён.

Автор: Akella 23.10.2006, 08:59
tigger, http://www.tmssoftware.com/

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

Добавлено @ 09:05 
поищи там демо-версии

Автор: PriZraK 1.6.2009, 23:13
Здравствуйте.
Ищу сорцы данного демо-приложения:
user posted image
Среди демо-приложений архива http://www.tmssoftware.com/DASGDEMOS.ZIP этот пример не нашёл.
Дело в том что необходимо отразить сообщение (Hint) над определённой строкой, либо в виде баллона (Balloon), либо в виде прямоугольного сообщения (OfficeHint). Так как среди значений компонента TAdvStringGrid есть такие как:
  • AdvStringGrid.BalloonInit
  • AdvStringGrid.BalloonDone
  • AdvStringGrid.Balloon
  • AdvStringGrid.OfficeHint
следовательно их как то можно применить и вызывать в определённом месте компонента.
Остаётся задать вопрос — как это сделать?

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

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

Установлен TMS Component pack v5.1.0.2 (Май 6, 2009). 
Версия входящего в пак TAdvStringGrid — 4.5.0.2.

Автор: Akella 3.6.2009, 18:23
http://www.tmssoftware.com/site/asg76.asp

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

if (ACol == 3)
AEditor = edSpinEdit;

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

Автор: Akella 24.6.2009, 13:11
Может поискать свойство типа AlwaysShowEditor или что-то в этом роде.

Автор: ActioN 25.6.2009, 08:27
Akella, перепробовал все возможные свойства, которые в названии хоть как-то имеют отношение - не нашел. Слишком их много. Демки тоже пересмотрел и тоже ничего такого не нашел. Ни в одной демке не нашел создания SpinEdit в ячейке.

Автор: Dizzzy Dozzzer 26.1.2010, 13:02
Цитата(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

Автор: Slan 6.5.2010, 11:44
 
 Дабы оживить тему...

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

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

 
 

Автор: Slan 19.5.2010, 11:56
 
 И весьма интересно:  а есть ли возможность сделать такой же фильтр как был в примере, который показывал PriZraK? Если кто знает способ создания просьба поделиться им)

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

Добавлено через 17 секунд
Может у тебя не та версия грида?

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

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

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


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

Переходи пока не поздно на DevExpress smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)