Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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