Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Закладки » Использование DevExpress (часть 3)

Модерирует : ShIvADeSt

ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

   

golkanavt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DevExpress

Обмен опытом, обсуждение нюансов и решение проблем возникающих при использовании библиотеки компонент Developer Express




 
Сами прирученные компоненты частенько приходят на водопой сюда
 
DLL со скинами из библиотеки dxSkins, автор Ziltoid Подробнее... линк обновлен
Продолжение, Первая часть, вторая часть

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 10:31 07-02-2009 | Исправлено: vladman, 14:36 24-10-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FunCode, да я ж написал, что к гриду привязана таблица

Цитата:
Прикрутил грид к таблице

 
Всего в таблице базы 2 поля: ID и NAME. В поле NAME я сохраняю путь с именем файла: C:\my_folder\my_file.xls, например.
Но в самом гриде я создал ещё одно непривязанное к базе поле, properties := image;
Самого файла может и не существовать. Но иконку нужно показать. Рылся вчера в инете, нарыл, как узнавать иконку, привязанную к типу, но как вывести её в грид, так и не нашёл.

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 09:28 10-08-2009
FunCode



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
X11
я бы сделал так, но есть некоторые "но", которые можно будет обсудить:
1. Кидаем TcxImageList на форму, добавляем в него иконки с обозначениями типов файлов.
2. У столбца Properties:=ImageComboBox, Images выбираем ImageList, теперь наполняем Items всеми иконками из ImageList при этом Value прописываем по следующему принципу - '.txt' для иконки тектового файла, '.xls' - для иконки Excel файла и т.п., а ValueType везде String.
3. Теперь задача получить набор данных не из двух столбцов, а сразу из трех. Я бы сделал это например так - SELECT ID, NAME, RIGHT(NAME, CHARINDEX('.', REVERSE(NAME))) AS EXTENSION  FROM MYTABLE
пример запроса на MSSQL2000.

Всего записей: 182 | Зарегистр. 22-10-2006 | Отправлено: 10:50 10-08-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
1. Кидаем TcxImageList на форму, добавляем в него иконки с обозначениями типов файлов.

Не, не, так не годится. Нужно из ОСи выдирать иконки и привязки. Но главное, как потом вывести это в поле грида.

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 11:42 10-08-2009
FunCode



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
X11

Цитата:
Нужно из ОСи выдирать иконки и привязки

ну так и наполняем ImageList иконками из ОС, а в Items выставляем привязки ...

Всего записей: 182 | Зарегистр. 22-10-2006 | Отправлено: 12:06 10-08-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Зачем мне наполнять сотней иконок ImageList? Это не рационально.
1. Хотя бы потому, что компоненты DevExpress и так неплохо кушают.
2. В таблице 3-5 строк.
3. Возможно что пользователь будет вставлять в таблицу только экселевские файлы, или только винраровские. Ну или 2-3 разновидности типов файлов.
А так получается нужно загрузить порядка сотни типов в ImageList, а потом ещё искать их в ImageList`е.


----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 12:27 10-08-2009
FunCode



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
X11
ну елси так мало, то через OnCustomDrawCell
 
Добавлено:

Цитата:
А так получается нужно загрузить порядка сотни типов в ImageList, а потом ещё искать их в ImageList`е.

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

Всего записей: 182 | Зарегистр. 22-10-2006 | Отправлено: 12:37 10-08-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11

Цитата:
Даже не знаю, в каком направлении копать.

Попробуйте следующее:

Код:
Uses ShellAPI;
function GetFileAssociatedIcon(AFileName: TFileName): HIcon;
var
  vBuffer: array[0..2048] of char;
  vIconIndex: Word;
begin
  StrCopy(@vBuffer, PChar(AFileName));
  vIconIndex := 0;
  Result := ExtractAssociatedIcon(HInstance, vBuffer, vIconIndex);
end;
 
procedure <YourForm>.<YourcxGridTableView>CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo:
    TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
  vIconHandle: HIcon;
begin
  if AViewInfo.Item = <YourcxGridTableViewFileImageColumn> then
    begin
      vIconHandle := GetFileAssociatedIcon(AViewInfo.GridRecord.Values[<YourcxGridTableViewFilePathColumn>.index]);
      DrawIcon(ACanvas.Handle, AViewInfo.ClientBounds.Left + 1, AViewInfo.ClientBounds.Top + 1, vIconHandle);
      ADone := True;
    end;
end;

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 17:21 10-08-2009
quarkus

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
несколько вопросов по соответствующей компоненте (DevExpress.XtraScheduler.DateNavigator)  
1. как убрать синий квадрат когда дата выделена (e.Selected=true)  
 
следующий код вообще убирает дату  
 
private void OnMonthCalendar_CustomDrawDayNumberCell(object sender, CustomDrawDayNumberCellEventArgs e)  
{  
            if (e.Selected) e.Handled = true;                            
}  
 
2. как убрать jumping (когда наводишь на граничную дату в месяце, то происходит скачок на следующий или предыдущий месяц)?

Всего записей: 2 | Зарегистр. 11-08-2009 | Отправлено: 12:13 11-08-2009
AlexPetrovich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Использую ручную фильтрацию в компоненте TcxLookupComboBox (через формирование ACombo.Properties.DataController.Filter). Если вводить данные в поле вручную, то все замечательно фильтруется. Но если присвоить ACombo.Text в коде, то фильтрация не работает. Т.е. можно присвоить любое значение которое есть в ListSource.
Как сделать, чтобы и при присвоении ACombo.Text в коде тоже происходила фильтрация, и если присвоенное значение не соответствут фильтру, то происходила очистка поля и EditValue стоновился Null ?

Всего записей: 87 | Зарегистр. 08-05-2003 | Отправлено: 17:43 11-08-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexPetrovich
Фильтруй датасет на который смотрит ListSource.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 17:51 11-08-2009
AlexPetrovich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я бы с радостью, но юзал Девовский фильтр именно потому, что он умеет делать LIKE, причем локально. А фильтр датасета так не умеет.

Всего записей: 87 | Зарегистр. 08-05-2003 | Отправлено: 18:07 11-08-2009
Martian2



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую всех!  
Есть проблема с RadioGroup - не привязывается нормально к источнику данных.  
Как правильно привязать?  
Привязываю по EditValue и SelectedIndex.Это уже изврат, но  при этом вроде работает но не с NULL значениями. При попытке изменить  NULL в источнике (датасете) ничего не происходит. В чем дело?

Всего записей: 3 | Зарегистр. 11-08-2009 | Отправлено: 18:22 11-08-2009 | Исправлено: Martian2, 18:24 11-08-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Martian2

Цитата:
Есть проблема с RadioGroup

RadioGroup - это набор Radio Buttons, представленных свойством Properties.Items.
Каждый Items (TcxRadioGroupItem) характеризуется свойством Value. Если, например, в вашем датасете текущая запись в поле связанном с RadioGroup (через свойство DataBinding.DataFiel) имеет значение 3 и, скажем, Properties.Items[2].Value = 3, то выбранным как раз и окажется этот, второй, Item. И наоборот, если вы выберете, скажем Properties.Items[0], у которого свойство Value = 8, то в соответствующее поле датасета и запишется 8. Но обычно делают Properties.Items[0].Value = 0, Properties.Items[1].Value = 1 и т.д. Пример выше был для иллюстрации общего случая. На самом деле, все зависит от того, что и как вы хотите сохранять и отображать с помощью этого контрола.
Для того чтобы в датасет записалось null - сделайте Item со значением свойства Value = Null. Не забывайте также указывать и тип значения Item'ов.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 01:01 12-08-2009
Martian2



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Для того чтобы в датасет записалось null - сделайте Item со значением свойства Value = Null. Не забывайте также указывать и тип значения Item'ов.

 
Спасибо! Я вас понял. Но ситуация такая что Value не работает с источником. Привязка через свойство EditValue не дает никаких результатов. Привязка через SelectedIndex – дает отображение  - то есть отображаются напрямую индексы. Соответственно NULL он не видит даже если Value NULL. При этом запись в источник не работает.
Лишь если привязать дополнительно еще и по свойству EditValue и установить режим обновления источника Never – то удается писать но писать Index а не Value. К примеру один из Item имеет индекс 5 Value = NULL. Пишется в источник 5. Если в источнике NULL – не отображается ни один из Items.
Единственный выход видится – не использовать NULL либо отождествлять его с целым, сразу при добавлении записи писать 5 допустим. Но это не правильно. Хочется чтоб с NULL тоже можно было работать.

Всего записей: 3 | Зарегистр. 11-08-2009 | Отправлено: 10:33 12-08-2009 | Исправлено: Martian2, 11:11 12-08-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexPetrovich

Цитата:
Если вводить данные в поле вручную, то все замечательно фильтруется

Решение напрашивается само собой - эмулируйте ручной ввод. Например так

Код:
procedure SendTextToLookupComboBox(ALookupComboBox: TcxlookupComboBox; AText: string);
var
  i: Integer;
  vLayoutName : Array [0..KL_NAMELENGTH] of Char;
begin
  GetKeyboardLayoutName(@vLayoutName);
  try
    LoadKeyboardLayout('00000419', KLF_ACTIVATE);
    ALookupComboBox.SetFocus;
    for i := 1 to Length(AText) do
        ALookupComboBox.Perform(WM_CHAR, Ord(AText[i]), 0);
  finally
    LoadKeyboardLayout(@vLayoutName, KLF_ACTIVATE);
  end;
end;

Манипуляция с раскладкой клавиатуры необходима из-за неверного отображения русских символов при вставке их посредством SendMessge (Perform).
 
 
Добавлено:
Martian2

Цитата:
Хочется чтоб с NULL тоже можно было работать.  

Да, есть такая недоделка - _http://www.devexpress.com/Support/Center/p/CB41675.aspx
Как видно с 2007 никак не исправят. Один из выходов, действительно, не использовать Null, а заменить его, например, -1-цей.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 13:33 12-08-2009
data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Внимание всем, использующим Delphi c 4 по 7 !
Появился саморазмножающийся вирус поражающий Delphi !
Поражены как минимум QIP и AIMP !
Если у Вас в папке Lib есть файл SysConst.bak - значит Ваш компьютер заражен.
Лечение - копирование этого файла с именем SysConst.dcu.
Подробности здесь

Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 07:22 13-08-2009
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cxSplitter1  - Если  иметь неосторожность  кликнуть мышкой  ,  оно ВСЕ что слева двигает влево ((((

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 15:18 13-08-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JohnSilver182
Нормально поведение контрола. Событие OnBeforeClose.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 15:38 13-08-2009
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Нормально поведение контрола. Событие OnBeforeClose.

 
А можно забаний такой изврат ???  ТОлько если зажал ЛКМ  и повел  плавно это гуд .

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 16:30 13-08-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JohnSilver182

Цитата:
А можно забаний такой изврат

Есть несколько решений от "забанийизврат":
1. Вы, скорее всего, установили свойство HotZone в одно из значений: MediaPlayer8, MediaPlayer9, XPTaskBar, StyleSimple. Установите это свойство в nil, и будет "забаний".
2. Если всеже хочется видеть HotZone, тогда - воспользуйтесь советом volserа и пропишите в обработчике указанного события AllowClose := False; Но тогда теряется весь смысл использования HotZone.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 23:19 13-08-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Закладки » Использование DevExpress (часть 3)
ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru