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

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

Автор: MagistrAnatol
Дата сообщения: 19.06.2013 16:10
Помощи не дождешься, пришлось самому писать
вот может кому пригодится и проще чем в примере с оффсайта

Код: [no]//---------------------------------------------------------------------------
void TForm1::LoadSkinInfo(AnsiString SkinFolder,TdxGalleryControl *Gallery)
{
TSearchRec sr;
AnsiString SkinNane,SkinGroupName;
int KlGroup=0;
int GroupIndex;

if (FindFirst(SkinFolder+"\\*.skinres", faAnyFile, sr) == 0)
        {
        do
        {
TBitmap *SkinIcon = new TBitmap();
TStream* AStream= new TFileStream(SkinFolder+"\\"+sr.Name,fmOpenRead | fmShareDenyWrite);
TdxSkinBinaryReader *AReader = new TdxSkinBinaryReader(AStream);

SkinGroupName=AReader->SkinDetails[0]->GroupName;
SkinNane=AReader->SkinDetails[0]->DisplayName;
SkinIcon=AReader->SkinDetails[0]->Icons[sis48]->GetAsBitmap();


    for (int i = 0; i < Gallery->Gallery->Groups->Count; i++)
    {
        if (Gallery->Gallery->Groups->Groups[i]->Caption==SkinGroupName)
        {
        KlGroup++;
        GroupIndex=i;
        }
    }


if (KlGroup==0)
    {
    Gallery->Gallery->Groups->Add();
    Gallery->Gallery->Groups->Groups[Gallery->Gallery->Groups->Count-1]->Caption=SkinGroupName;
    GroupIndex=Gallery->Gallery->Groups->Count-1;
    }
TdxGalleryControlItem *AItem = Gallery->Gallery->Groups->Groups[GroupIndex]->Items->Add();
AItem->Glyph->Assign(SkinIcon);
AItem->Caption = SkinNane;
AItem->Name=sr.Name.SubString(1,sr.Name.Pos(".")-1);


delete AStream;
delete AReader;

        } while (FindNext(sr) == 0);
        FindClose(sr);
        }

}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
LoadSkinInfo(Edit1->Text,dxGalleryControl123);
}
//---------------------------------------------------------------------------
[/no]
Автор: neznayka3
Дата сообщения: 20.06.2013 13:57
есть unbound столбец c checkbox, для выделения строк. все работает, если не выделять записи через Ctrl или Shift. как ставить/убирать чекбоксы при выборе записей через Ctrl/Shift?
Автор: G787
Дата сообщения: 21.06.2013 06:17
Хочу сделать шоб в cxTreeList1 родительский нод был без чекбокса а его дочка с чекбоксом, делаю так и оба нода без чебоксаров
Шо не так ?

Код:
var CNode: TcxTreeListNode;
.....
cxTreeList1.BeginUpdate;

with cxTreeList1.Add do
begin
CheckGroupType := ncgNone;
Texts[0] := 'tmpPrefix';
// EndEdit(False);

CNode := AddChild;
CNode.Enabled := True;
CNode.Checked := True;
CNode.CheckState := cbsChecked;
CNode.CheckGroupType := ncgCheckGroup;
CNode.Texts[0] :=' tmpName';
// CNode.EndEdit(False);

end;
cxTreeList1.EndUpdate;
Автор: YpL
Дата сообщения: 21.06.2013 09:43
G787, СПАСИБО ЗА НАВОДКУ.

Добавлено:
Подскажите, пожалуйста, как сделать
так, чтобы чекбоксы на любых уровнях
работали индивидуально, т.е. не влияли на
состояние чекбокса парент узла?
Автор: EagleSW
Дата сообщения: 21.06.2013 10:12
К сведению, Delphi, с XE2 Update 4 и по XE4 Update 1 включительно не совсем дружит с DevExpress.
Перестало работать обновление DB-компонентов при использовании DisableControls\EnableControls.

Тульские хлопцы ссылаются вот на этот баг, но закрывать его как-то эмбаркадеро не спешит.
Хотя и есть костыль, но меня не радует в большом проекте выискивать и исправлять 100500 мест.

Предлагаю всем заинтересованным проголосовать за этот баг. Вдруг поможет
Автор: Shepot
Дата сообщения: 21.06.2013 12:10
Подскажите пожалуйста, в девках версии 2.6 уже можно нормально мержить Ribbon-контролы в MDI-приложениях или еще нет?
Автор: G787
Дата сообщения: 22.06.2013 08:08
EagleSW
Небось стимулируют переходить на новую Xe


Цитата:
Подскажите пожалуйста, в девках версии 2.6 уже можно нормально мержить Ribbon-контролы в MDI-приложениях или еще нет?


Кстати да, раньше ещё во времена D7 MDI режим считался крайне глючным и не рекомендовался для юзания, прошло много времени, ситуация изменилась ?

Добавлено:
Люди а как работать с cxTRichViewEdit ? Чето не понимаю ...

Добавлено:
разобрался, через InnerEditor

Добавлено:
Господа а есть ли у кого адаптированный cxTRichViewEdit под современный tRichViewEdit ?
Автор: reenoip
Дата сообщения: 22.06.2013 10:43
Заблудился в трёх соснах... Есть в cxGrid колонка с датой/временем в формате dd.mm.yyyy hh:mm:ss. В выпадающем фильтре колонки, естественно, был бардак - отображались и дата, и время. Решил упорядочить меню - оставить только сгруппированные даты. Выставил

Цитата:
cxGridDBTableView1.DateTimeHandling.IgnoreTimeForFiltering = True;
cxGridDBTableView1.DateTimeHandling.Grouping = dtgByDate;

В итоге, если раньше в фильтре было "01.01.2013 11:42:55", "01.01.2013 11:44:51" и т.д., то после применения двух опций стало просто "01.01.2013". Но если отметить эту дату, то в гриде ничего не появляется. Т.е. пусто. Что я делаю не так?

Добавлено:
Странно как-то. Нашёл пример, делающий именно то, что мне и нужно. Открыл пример, сравнил настройки грида в целом, и колонки в частности - всё тика в тику, но поведение разное.

Добавлено:
Автор: perceptron
Дата сообщения: 24.06.2013 10:34
Может кто подскажет как сделать чтобы в cxGrid заблокировать потерю фокуса на момент вставки (изменения) новой записи ? cxGrid связан с cxMemData без режима синхронизации

Код:
try
LockWindowUpdate(cxGridTest.Handle);
dxMemData1.DisableControls;
MyValue := VarArrayCreate([0, 1], varVariant);
MyValue[0] := sID;
MyValue[1] := 0;

if dxMemData1.Locate('ID;Type', Value, []) then
begin
dxMemData1.Edit;
try
dxMemData1.FieldByName('Field1').Value := sValue1;
...
dxMemData1.FieldByName('FieldN').Value := sValue2;
finally
dxMemData1.Post;
end;
end
else
begin
dxMemData1.Insert;
try
dxMemData1.FieldByName('Field1').Value := sValue1;
...
dxMemData1.FieldByName('FieldN').Value := sValue2;
finally
dxMemData1.Post;
end;
end
finally
dxMemData1.EnableControls;
cxGridTestView.DataController.LocateByKey(MyValue);
end;
Автор: EagleSW
Дата сообщения: 24.06.2013 11:00
perceptron
если на момент изменения фокус тоже улетает на редактируемую запись (а у тебя это делается с помощью dxMemData1.Locate), то обратный dxMemData1.Locate должен помочь
Похоже что EnableControls приводит к явной синхронизации датасета и грида.
Автор: exteris
Дата сообщения: 24.06.2013 11:02
perceptron
Какой результат возвращает LocateByKey?
Автор: EagleSW
Дата сообщения: 24.06.2013 11:17
reenoip

Цитата:
Есть в cxGrid колонка с датой/временем в формате dd.mm.yyyy hh:mm:ss

Есть стойкое ощущение, что все ваши проблемы из-за формата.
У вас два раза встречается "mm" - а это всегда месяц, но никак не минуты
Автор: perceptron
Дата сообщения: 24.06.2013 11:22

Цитата:
Какой результат возвращает LocateByKey?

В основном True - но иногда False - и тогда фокус уходит на первую запись а не добавленную

Добавлено:
2EagleSW:
Спасибо мил человек - повторный Locate решил проблему !
Автор: EagleSW
Дата сообщения: 28.06.2013 08:49
Вчера зарелизили VCL Subscription v2013 vol 1.2.

Распараллеленная сортировка колонок в гриде - конечно круто и шустро, но с синхронизацией потоков тульские мужики где-то накосячили.
Исключения валятся пачками (при сортировке Lookup-колонок).

Кто-нибудь знает, как вернуть старый механизм сортировки?
Или откатываться на предыдущую версию?
Автор: alsterkh
Дата сообщения: 28.06.2013 08:50
perceptron
а через GetBookmark и GotoBookmark не надежней?
Автор: X11
Дата сообщения: 28.06.2013 09:18

Цитата:
Распараллеленная сортировка колонок в гриде - конечно круто и шустро, но с синхронизацией потоков тульские мужики где-то накосячили.
Исключения валятся пачками (при сортировке Lookup-колонок).

Кто-нибудь знает, как вернуть старый механизм сортировки?


да-да, читал что где-то было такое свойство
посмотрите справку, свойства сетки, а также можно это поискать на их сайте в разделе "Что нового".
Автор: EagleSW
Дата сообщения: 28.06.2013 09:27
X11
Да, нашлись новые свойства у гридовых View: DataController\MultiThreadedOptions\Filtering и Sorting = True\False. Ставлю False и исключения пропадают.
Почти счастье, но гридов в проекте 100500 штук, ищу какое-нибудь общее решение ...
Автор: X11
Дата сообщения: 28.06.2013 09:35
Нужно закрыть проект, сделать резервную копию, и каким-нибудь файл-манагером сделать поиск и замену по всем DFM.
И ещё второй вариант. Установить cnPack или gExperts и там есть функция SetProperties или что-то в этом роде. Можно устанавливать свойства компонент всего проекта. Точно не помню, ЕМНИМ, то эта функция живёт в gExperts

Добавлено:
Ошибся. См в cnPack модуль "Property Corrector"

Цитата:
This wizard is used to modify components' properties by some customized rules. Destination can be all components in current form or all forms in current project/projectgroup.
Автор: neznayka3
Дата сообщения: 28.06.2013 14:20
про TcxDBTextEdit. когда юзер копирует текст в в целочисленное поле, выходит ошибка
Цитата:
Invalid input value. Use escape key to abandon changes
. как запретить выходить этой ошибке и самому показывать сообщение?
Автор: reenoip
Дата сообщения: 28.06.2013 15:30

Цитата:
Есть стойкое ощущение, что все ваши проблемы из-за формата.
У вас два раза встречается "mm" - а это всегда месяц, но никак не минуты

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

Добавлено:
Вот так это выглядит на данный момент у меня:


Осталось только сделать так, чтобы при выборе конкретной даты в гриде хоть что-нибудь отобразилось. На данный момент после выбора даты (т.е. отметки в чекбоксе) - грид пустой. Но сравнив своё приложение с примером от DE я не нашёл разницу. Более того, я скопировал грид из их примера в свой проект - безрезультатно.
Автор: exteris
Дата сообщения: 28.06.2013 16:01

Цитата:
про TcxDBTextEdit. когда юзер копирует текст в в целочисленное поле, выходит ошибка
Цитата:
Invalid input value. Use escape key to abandon changes
. как запретить выходить этой ошибке и самому показывать сообщение?


Properties - ValidationOptions - evoRaiseException -> False
И свою проверку в событии OnValidate.
Автор: bolega
Дата сообщения: 28.06.2013 21:41
Понадобилось сделать в гриде мульт-селект ячеек в несмежных строках через ctrl-mouse-клик. Оказалось, что такого функционала нет. На сайте разработчика где-то встретил подобный вопрос и ответ, что мол, к сожалению, это не предусмотрено и не планируется. Был сильно удивлен такой казалось бы пустяшной засаде. При том, что мультиселект несмежных строк запросто выполняется программно, а вот мышой - никак. Покопался в исходниках, сделал такое небольшое исправление:

function TcxGridTableController.SupportsRecordSelectionToggling: Boolean;
begin
// было:
// Result := not CellMultiSelect;
Result := true
end;

После этого мультиселект через Ctrl заработал. Граблей пока никаких не выплыло.
Автор: reenoip
Дата сообщения: 29.06.2013 09:02
Мой вопрос относительно фильтрации в колонке по дате без учёта времени решился-таки (впрочем, как и всегда) методом тыка: cxGrid1DBTableView1 > DataController > DataModeController > SmartRefresh:=True
Автор: exteris
Дата сообщения: 29.06.2013 10:26
bolega
Спасибо.
Интересно, в предке стоит -
function TcxCustomGridTableController.SupportsRecordSelectionToggling: Boolean;
begin
Result := True;
end;
Автор: mdid
Дата сообщения: 03.07.2013 19:38
или я туплю под конец дня или хз. В общем делал я все свои проекты с флагом ColumnAutoWidth. Заказчик захотел, что бы ширина колонки выставлялась по максимальному значению. Убрав эту галку, я результат не получил, и ничего похожего в свойствах не нашел(или плохо искал) Подскажите плиз свойство, которое решит мою проблему
Автор: Darl
Дата сообщения: 03.07.2013 20:02
mdid

По памяти, кажись было, Column->Width= то ли -1, то ли -2.
Автор: mdid
Дата сообщения: 03.07.2013 20:20
Darl
неа(( не реагирует ни на -2,-1 ни на 0.
ПС
нашел ApplyBestFit
Автор: AlexCoRu
Дата сообщения: 04.07.2013 15:50
Что за беда с cxGrid?
Есть два TClientDataSet cdsMaster и cdsDetail.
У cxGrid две вюхи MasterTableView и DetailTableView, связаные с соответсвующими источниками. Присвоены MasterTableView.DataController.KeyFieldNames и DetailTableView.DataController.KeyFieldNames. Всё работает кроме каскадного удаления записи из cdsDetail при удалении из cdsMaster.
cdsMaster.BeforeDelete
Код: procedure TForm1.cdsMasterBeforeDelete(DataSet: TDataSet);
var
MasterID: Variant;
begin
MasterID := cdsMaster.FieldValues['ID'];
if cdsDetail.Locate('MASTER_ID', MasterID, []) then
begin
cdsDetail.DisableControls;
repeat
cdsDetail.Delete;
until not VarSameValue(cdsDetail.FieldValues['MASTER_ID'], MasterID);
cdsDetail.EnableControls;
end;
end;
Автор: Deeptown12
Дата сообщения: 09.07.2013 08:48
Добрый день, помогите разобратся с CxGrid
Проблема в следующем, есть два уровня Level - основной и подчиненный, подчиненный связан с основным, там все нормально
Grid-ы в режиме GridMode - False
DetailInSQL - выключен
т.е классический случай основная и подчинные выборки открыти полностью и CxGrid сам подчиненные записи показывает в подчиненном Level своими средствами
Сама проблема
иногда при вставке записи в подчиненную таблицу, cxGrid отображает вставляему подчиненную запись не там (не у того родителя), см. рисунок
т.е вставляем запись для индикаторов, а грид почему то нарисует ее для курвиметров, хотя после переоткрытия датасетов все отобразится правильно, запись будет в индикаторах (т.е в БД ложатся с ключами записи правильно).
Т.е глюк самого cxGrid, кто нибудь сталкивался с этим и можно ли побороть

Автор: reenoip
Дата сообщения: 09.07.2013 12:04
cxGrid с двумя десятками колонок. Нужен моментальный поиск/фильтрация по всем колонкам. Пытаюсь для этих целей прикрутить обычный Edit, привязав фильтрацию к нажатию клавиш:


Код: procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
i: integer;
s: string;
begin
cxGrid1DBTableView1.DataController.Filter.Active:=false;
with cxGrid1DBTableView1.DataController.Filter.Root do
begin
Clear;
BoolOperatorKind:=fboOr;
s:='%' + Edit1.Text + '%';
for i:=0 to cxGrid1DBTableView1.ColumnCount -1 do
AddItem(cxGrid1DBTableView1.Columns[i], foLike, s, s);
end;
cxGrid1DBTableView1.DataController.Filter.Active:=true;
end;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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