Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Использование DevExpress (часть 4)

Автор: makz
Дата сообщения: 20.01.2013 02:33
Marcello_TLT
Ну можно еще попробовать PopupEdit из cxEditItems.
Автор: eddoc
Дата сообщения: 20.01.2013 10:38
makz
Вот спасибо.

Еще вопрос: никак не удается отрисовать картинку в [more=cxComboBox] взятую из cxImageList (в обычном комбе с обычным имайджлистом, правда с другим синтаксисом, все работает)

Код: procedure TFrmDevScheduler.cxCbBox1PropertiesDrawItem(AControl: TcxCustomComboBox; ACanvas: TcxCanvas; AIndex: Integer; const ARect: TRect; AState: TOwnerDrawState);
begin
cxCbBox1.Canvas.FillRect(ARect,clWindow);
cxImgLst1.Draw(ACanvas,ARect.Left,ARect.Top,AIndex,dsTransparent,itImage,True);//ошибка
end;
Автор: X11
Дата сообщения: 21.01.2013 09:13

Цитата:
Подскажите, как добраться к каждой выделенной записи в cxGridDBTableView при множ. выборе?


http://www.sql.ru/blogs/x11/1343

Добавлено:
http://www.sql.ru/forum/actualthread.aspx?tid=661254
Автор: eddoc
Дата сообщения: 21.01.2013 14:36
X11
Спасибо, смотрю...
Автор: X11
Дата сообщения: 22.01.2013 11:40
Есть процедура поиска в cxGrid источник на sql.ru

[more=код процедуры]
Код:
type
TcxDataControllerGroupsProtected = class(TcxDataControllerGroups);

const
MsgDataNotFound = 'Данные, удовлетворяющие условию поиска, не обнаружены';

procedure Search(AView: TcxGridDBBandedTableView; AText: string; AFromBeginning: boolean);
var
GroupsIndex: integer;
GroupsCount: integer;
ChildCount: integer;
ColIndex: integer;
RowIndex: integer;
RecIndex: integer;
CurIndex: integer;
i, j, k: integer;
Result: boolean;
function
Compare(ARecIndex, AColIndex: integer): boolean;
begin
Result :=
AnsiContainsText
(
AView.DataController.DisplayTexts
[
ARecIndex,
AView.VisibleColumns[AColIndex].Index
],
AText
);
end;
begin
Result := false;

if AFromBeginning then
begin
// поиск с начала
// строка - первая
// столбец - первый
RowIndex := 0;
ColIndex := 0;
end
else
begin
// поиск с текущей позиции
// строка - текущая
// столбец - слещующий после текущего
// если текущий столбец последний, то начинаем поиск
// с первого столбца следующей строки
RowIndex := AView.Controller.FocusedRowIndex;
ColIndex := AView.Controller.FocusedColumnIndex;
if AView.Controller.FocusedColumn.IsLast then
begin
ColIndex := 0;
Inc(RowIndex);
end
else
Inc(ColIndex)
end;

if AView.DataController.Groups.GroupingItemCount = 0 then
begin
// поиск в несгруппированном представлении
for i := RowIndex to AView.ViewData.RowCount - 1 do
begin
RecIndex := AView.ViewData.Rows[i].RecordIndex;
if RecIndex = -1 then
Continue;

for j := ColIndex to AView.VisibleColumnCount - 1 do
begin
Result := Compare(RecIndex, j);
if Result then
begin
AView.Controller.FocusedRecordIndex := RecIndex;
AView.Controller.FocusedColumnIndex := j;
Break;
end;
end;

ColIndex := 0;
if Result then
Break;
end;
end
else
begin
// поиск в сгруппированном представлении
GroupsCount := TcxDataControllerGroupsProtected(AView.DataController.Groups).DataGroups.Count;
GroupsIndex := AView.DataController.Groups.DataGroupIndexByRowIndex[RowIndex];
for i := GroupsIndex to GroupsCount - 1 do
begin
ChildCount := AView.DataController.Groups.ChildCount[i];
for j := 0 to ChildCount - 1 do
begin
RecIndex := AView.DataController.Groups.ChildRecordIndex[i, j];
if RecIndex = -1 then
Continue;

CurIndex := AView.DataController.GetRowIndexByRecordIndex(RecIndex, false);
if (CurIndex > -1) and (CurIndex < RowIndex) then
Continue;

for k := ColIndex to AView.VisibleColumnCount - 1 do
begin
Result := Compare(RecIndex, k);
if Result then
begin
AView.Controller.FocusedRowIndex := AView.DataController.GetRowIndexByRecordIndex(RecIndex, true);
AView.Controller.FocusedColumnIndex := k;
Break;
end;
end;

ColIndex := 0;
if Result then
Break;
end;

if Result then
Break;
end;
end;

if not Result then
raise Exception.Create(MsgDataNotFound);
end;
Автор: makz
Дата сообщения: 22.01.2013 15:02
X11


Цитата:
нормальной стандартной встроенной процедуры поиска


Ну не знаю ваши критерии, но мне вполне достаточно свойств DataController.Search. Если его использовать, ваша процедурка станет на глазок раз в пять короче и понятнее, а возможно и корректнее.
Автор: X11
Дата сообщения: 22.01.2013 15:23
ЕМНИП, то свойств DataController.Search ищет только по начальным символам
Автор: makz
Дата сообщения: 22.01.2013 15:49
X11
А фильтр не годится?
Автор: X11
Дата сообщения: 22.01.2013 15:53
Не. Нужен полноценный, нормальный стандартный поиск.

Нашёл, что можно попробовать FindRecordIndexByText.
Нужно будет почитать, погуглить про это.
Автор: makz
Дата сообщения: 22.01.2013 16:03
X11
Он тоже с начала строки. Самое простое - пробежаться по строкам, типа вот:

for I := 0 to cxGrid1DBTableView1.DataController.FilteredRecordCount - 1 do
begin
ARecordIndex := cxGrid1DBTableView1.DataController.FilteredRecordIndex[I];
if (Pos('щу', cxGrid1DBTableView1.DataController.Values[ARecordIndex, cxGrid1DBTableView1Name.Index]) <> 0) then
cxGrid1DBTableView1.DataController.FocusedRecordIndex := ARecordIndex;
end;
cxGrid1.SetFocus;
Автор: delover
Дата сообщения: 22.01.2013 17:19
Существует ли сборка для 2010 с dxDBGrid?
Автор: sobolenok
Дата сообщения: 23.01.2013 08:21
Добрый день! Нужен компонент для ввода времени в виде Часы:минуты. Но! Так как это период времени (к примеру длительность чего либо составляет 40 часов 55 минут), то cxTimeEdit не подходит, тк в нем жестко прошита длительность времени не более 23 часов.
Конкретнее - ограничение здесь:


Код: function IsCharValidForTimeEdit(ATimeEdit: TcxCustomMaskEdit;
var AChar: Char; APos: Integer;
const ATimeZoneInfo: TcxTimeEditZoneInfo): Boolean;

procedure GetTimeValueItemValueRange(out AMinValue, AMaxValue: Integer);
Автор: dimm78
Дата сообщения: 23.01.2013 09:20

Цитата:
sobolenok


А может использовать cxButtonEdit? Доступ к кнопкам у него есть и маски поддерживаются так же как и в cxMaskEdit.
Автор: sobolenok
Дата сообщения: 23.01.2013 09:28

Цитата:
cxButtonEdit


дело в том что в нем нельзя добавить кнопки spinedita, нету их там в списке
cxButtonEdit.cxButtonEditProperties.Buttons[0].Kind
Автор: mdid
Дата сообщения: 23.01.2013 09:53
sobolenok
а рядом долепить spinbutton?
Автор: sobolenok
Дата сообщения: 23.01.2013 10:03

Цитата:
долепить spinbutton


угу, похоже так и придется делать, спасибо)
Автор: marser
Дата сообщения: 23.01.2013 11:35
sobolenok

Цитата:
Куда копаю - в сторону cxMaskEdit. Но не хватает кнопочек spinedit справа. В принципе если можно их добавить каким то простым методом то проблема решена


Код: with cxMaskEdit.Properties.Buttons.Add do
begin
OnButtonClick := .....;
Kind := bkGlyph;
Glyph.LoadFromResourceName(HInstance, '....');
end;
Автор: eddoc
Дата сообщения: 23.01.2013 16:46
Пытаюсь сделать грид полосатым. Если создать стиль в design time, то все в порядке. А если пытаться кодом

Код: cxGrid1DBTableView1.Styles.ContentOdd.Color:= clGreen;
Автор: X11
Дата сообщения: 23.01.2013 16:52
а сам стиль назначили?
Небось cxGrid1DBTableView1.Styles равен nil?
Автор: eddoc
Дата сообщения: 23.01.2013 17:39
X11
если по дефолту его значение равно nil, то оно так и есть. А как назначить программно?
Автор: marser
Дата сообщения: 24.01.2013 05:39
eddoc

Цитата:
А как назначить программно?

Код: st: TcxStyle;
.........
st := TcxStyle.Create(Self);
st.Color := clGreen;
cxGrid1DBTableView1.Styles.ContentOdd := st;
Автор: eddoc
Дата сообщения: 24.01.2013 12:06
marser
Спасибо.

В таком случае переменную st придется создавать/уничтожать в секции инициализации/деинициализации модуля?

Update: да уж. Проще компоненту в репозиторий положить
Автор: marser
Дата сообщения: 24.01.2013 13:44
eddoc

Цитата:
В таком случае переменную st придется создавать/уничтожать в секции инициализации/деинициализации модуля?

Код: cxGrid1DBTableView1.Styles.ContentOdd := TcxStyle.Create(Self);
cxGrid1DBTableView1.Styles.ContentOdd.Color := clGreen;
Автор: reenoip
Дата сообщения: 24.01.2013 16:11
Отправили к вам...
Автор: G787
Дата сообщения: 26.01.2013 09:19
Как сделать что бы у окна вместо стандартного заголовка был заголовок Ribbon-а ?

Добавлено:
Как у Ribbon-а поменять скин ?
Автор: eddoc
Дата сообщения: 26.01.2013 16:43
Рихтую шедулер напильником дальше...

Есть ли какой способ (желательно программно) поменять цвет шрифта в отображаемом эвенте, чтобы достичь оптимальной читабельности/контрастности?



зы: юзер имеет возможность самостоятельно задавать значение LabelColor, в выборе цветов не хотелось бы его ограничивать
Автор: G787
Дата сообщения: 26.01.2013 18:08
А в cxRichEdit gif-ку анимированную можно засунуть ?

Добавлено:
Или как в него картинки сувать все никак не пойму ?
Автор: makz
Дата сообщения: 27.01.2013 03:41
G787
Вот пример от производителя
_http://www.devexpress.com/Support/Center/Attachment/GetAttachment?fileOid=301eddf2-94ea-43eb-bf0c-344aa4ee1910&fileName=dxSample.zip

eddoc

Цитата:
зы: юзер имеет возможность самостоятельно задавать значение LabelColor, в выборе цветов не хотелось бы его ограничивать

Тогда придется изобретать функцию для смены цвета шрифта, в зависимости от labelcolor, и ставить ее в oncustomdrawevent.

Код:
var
Color: Longint;
r, g, b: Byte;
begin
Color := ColorToRGB(AViewInfo.Color);
r := Color;
g := Color shr 8;
b := Color shr 16;

if (299 * r + 587 * g + 114 * b > 127500 )
// светлый
AViewInfo.Font.Color:=clBlack;
else
// темный
AViewInfo.Font.Color:=clWhite;
Автор: reenoip
Дата сообщения: 27.01.2013 10:23
Есть обширный список значений, вставленных в cxComboBox. Чтобы чисто визуально разделить их (там есть свои категории) - пришлось вставить пустые строки между некоторыми строками. В итоге список внешне выглядит так:


Цитата:
Строка 1
Строка 2
Строка 3

Строка 4
Строка 5
Строка 6
Строка 7
Строка 8

Строка 9
Строка 10

Строка 11
Строка 12
Строка 13
Строка 14
Строка 15
Строка 16


Только как теперь запретить пользователям выбирать эти пустые строки?
Автор: makz
Дата сообщения: 27.01.2013 13:11
reenoip
_http://www.devexpress.com/Support/Center/p/Q137876.aspx

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.