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

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

Автор: SIgor33
Дата сообщения: 15.12.2010 10:22
vladman

Цитата:
Установите свойство Properties.ViewStyle = vsHideCursor у ButtonEditProperties

Это я уже выставлял. Тут не много хочу уточнить что поле blob, а в evente GetDisplayText я меняю текст в зависимости от того пустой blob или нет. Когда фокус попадает на это поле значение GetDisplayText меняет за надпись blob а хотелось чтобы осталось та же что была (например файл не загружен), а по ButtonEdit файл загружаю надпись меняется. Все нормально отрабатывается только не хочется видеть надпись blob.
Автор: neznayka3
Дата сообщения: 15.12.2010 12:01
загружаю данные в cxDBTreeList, кол-во уровней не ограничено. как всем nod-ам проставить CheckGroupType?
Автор: SIgor33
Дата сообщения: 15.12.2010 12:14
neznayka3

Цитата:
CheckGroupType?

<yuocxDBTreeList>FocusedNode.CheckState:= cbsChecked;
Автор: neznayka3
Дата сообщения: 15.12.2010 12:17
поставил OptionsView.CheckGroups=true. надо чтобы все элементы в cxDBTreeList имели checkbox.
Вы оказывается этот же вопрос задавали)
Автор: SIgor33, Отправлено:21:09 10-09-2010.
как решили?
Автор: marser
Дата сообщения: 15.12.2010 12:36
neznayka3

Цитата:
поставил OptionsView.CheckGroups=true. надо чтобы все элементы в cxDBTreeList имели checkbox.

Скорей всего только программно, но не уверен. Бежишь по Nodes и ставишь
нужный Node.CheckGroupType.
Автор: vladman
Дата сообщения: 15.12.2010 13:04
SIgor33

Цитата:
Это я уже выставлял

В on<Your>ColumnGetDisplayText выполняем AText := 'Loaded';
В on<YourView>InitEditValue выполняем if AItem = <Your>Column then AValue := 'Loaded';,
например
Автор: SIgor33
Дата сообщения: 15.12.2010 14:47
vladman

Цитата:
В on<Your>ColumnGetDisplayText выполняем AText := 'Loaded';

У меня так и сделано я же говорю когда поле blob при фокусе ячейки в ней надпись load пропадает появляется (blob) когда фокус покидает ее опять то что надо отображается хотелось бы что бы не было кратковременного появления blob
Автор: vladman
Дата сообщения: 15.12.2010 16:49
neznayka3

Цитата:
загружаю данные в cxDBTreeList, кол-во уровней не ограничено. как всем nod-ам проставить CheckGroupType?

Попробуйте так

Код: var
vTreeListNode: TcxTreeListNode;
...
vTreeListNode := <Your>DBTreeList.Root;
while vTreeListNode <> nil do
begin
if vTreeListNode.CheckGroupType <> ncgCheckGroup then vTreeListNode.CheckGroupType := ncgCheckGroup;
vTreeListNode := vTreeListNode.GetNext;
end;
Автор: SIgor33
Дата сообщения: 16.12.2010 08:31
vladman

Цитата:
я же говорю, что нужно стараться читать все сообщение, а не его часть )

Спасибо. Я с Вами согласен не досмотрел до конца
Автор: kirdub
Дата сообщения: 16.12.2010 12:05
Добрый день!
Есть cxGrid в нем колонка. необходимо производить поиск в этой колонке и перемещаться на первое найденое значение. Но нашел решение только для поиска начиная с первого символа. а мне надо производить поиск по части слова(например если ввожу 123 в поле ввода cxTextEdit то перемещается на запись 8812388, сейчас реализовано перемещение только на 1238888)
вот как ищу.
tk.Controller.EditingController.HideEdit(True);
tk.DataController.GotoFirst;
tk.DataController.Search.Locate(1,trim(cxTextEdit1.Text));
tk.DataController.Search.Cancel;
Автор: X11
Дата сообщения: 16.12.2010 12:18
kirdub, если бы ты поискал здесь, то нашёл бы. И нашёл бы даже готовый код, а не только намёки, как это сделать Обрати внимание на кнопку "Версия для печати" справа вверху, а потом воспользуйся поиском браузера. Поищи в этой части, и в части №3.
Автор: kirdub
Дата сообщения: 16.12.2010 13:20

Цитата:
Поищи в этой части, и в части №3.

Оказывается заезженная тема, прошу прощения, не внимательно воспользовался поиском))) Спасибо
Автор: rdenk1
Дата сообщения: 17.12.2010 11:55
Кто нибудь знает, как сделать то, что в excel называется "Объединение по строкам"? Т. е. например было:

Стало:

Вместо этого получается так:

И к тому же мне это надо только для определенных строк сделать
Автор: vladman
Дата сообщения: 17.12.2010 17:17
rdenk1

Цитата:
Вместо этого получается так:

А как у вас так получается?
Автор: rdenk1
Дата сообщения: 17.12.2010 23:10
Просто ставлю cellmerging=true
Автор: linker_2009
Дата сообщения: 17.12.2010 23:16
rdenk1
Назовите компонент, что сделали, задачу.
Автор: rdenk1
Дата сообщения: 17.12.2010 23:21
cxgrid, bandedtableview. Задача - сделать объединение по строкам. Даже если в строках одно и то же значение строки друг с другом не сливаются, слияние идет только у ячеек одной строки
Автор: vladman
Дата сообщения: 18.12.2010 00:47
rdenk1

Цитата:
Просто ставлю cellmerging=true

Нет, рисунок, озаглавленный *Вместо этого получается так:* никак не мог получиться указав свойство cellmerging=true.
cellmerging "сливает", как вы почти правильно написали, значения только в пределах столбца.
Для решения вашей задачи можно воспользоваться методом onCustomDrawCell и в нем полностью нарисовать нужные вам "слитые" ячейки.
Автор: TechnoDreamer
Дата сообщения: 18.12.2010 02:25
rdenk1, cxGrid не позволяет штатными средствами делать объединение ячеек в строке. Только в столбце (к тому же после этого столбец становится read only).
Автор: rdenk1
Дата сообщения: 18.12.2010 08:38
vladman

Цитата:
Для решения вашей задачи можно воспользоваться методом onCustomDrawCell и в нем полностью нарисовать нужные вам "слитые" ячейки.

Попробовал поставить в это событие такой код:

Код: procedure TForm1.cxGrid1BandedTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var r:trect;
begin
r:=aviewinfo.Bounds;
inc(r.Bottom);
inc(r.Right);
ACanvas.Brush.Color:=clred;
ACanvas.Pen.Color := clred;
ACanvas.Canvas.Rectangle(R);
ACanvas.Brush.Style := bsSolid;
ACanvas.Pen.Color := clblack;
ACanvas.Brush.Color:=clred;
ACanvas.DrawText(AviewInfo.Text, R, cxAlignVCenter);
ADone := True;
end;
Автор: vladman
Дата сообщения: 18.12.2010 11:54
rdenk1

Цитата:
И в результате граница между ячейками строки видна. Я что-то упустил?

Пропустили, всего навсего, код слияния ячеек.
Попробуйте за основу использовать вот этот код:

Код: procedure <YorForm>.<YourcxGridDBTableView>CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo:
TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
vRect: TRect;
vPreviousViewInfo: TcxGridTableDataCellViewInfo;
vTextAreaBounds: TRect;
vMargedColumn1, vMargedColumn2: TcxGridDBColumn;
vBorderColor: TColor;
begin
vMargedColumn1 := <YourcxGridDBTableView>Column1;
vMargedColumn2 := <YourcxGridDBTableView>Column2;

if (AViewInfo.Item.Index in [vMargedColumn1.Index, vMargedColumn2.Index]) and
(AViewInfo.GridRecord.Values[vMargedColumn1.Index] = AViewInfo.GridRecord.Values[vMargedColumn2.Index]) then
begin
AViewInfo.Borders := [];
if AViewInfo.Item.Index = vMargedColumn2.Index then
begin
vPreviousViewInfo := Sender.ViewInfo.RecordsViewInfo.Items[vMargedColumn1.Index].GetCellViewInfoByItem(vMargedColumn1);
vTextAreaBounds := AViewInfo.TextAreaBounds;
vTextAreaBounds.Left := vPreviousViewInfo.TextAreaBounds.Left;
ACanvas.DrawTexT(AViewInfo.Text, vTextAreaBounds, cxAlignHCenter);
vRect := AViewInfo.Bounds;
vRect.Left := vPreviousViewInfo.Bounds.Left - 1;
vRect.Top := vRect.Top - 1;
vBorderColor := AViewInfo.BorderColor[bLeft];
ACanvas.DrawComplexFrame(vRect, vBorderColor, vBorderColor, [bTop, bLeft, bBottom, bRight], 1);
end;
ADone := True;
end;
end;
Автор: rdenk1
Дата сообщения: 19.12.2010 06:09
Понятно. Тогда вопрос по cxspreadsheet. Пытаюсь выполнить код:


Код: var
ACell: TcxSSCellObject; HAlign: TcxHorzTextAlign; VAlign: TcxVertTextAlign; i, j: Integer;
i := 1;
j := 1;
for HAlign := haGENERAL to haJUSTIFY do
begin
for VAlign := vaTOP to vaJUSTIFY do
begin
ACell := cxSpreadSheet1.Sheet.GetCellObject(i, j);
try
ACell.Style.HorzTextAlign := HAlign; ACell.Style.VertTextAlign := VAlign; ACell.Text := 'a bc def ghij klmn'; ACell.Style.WordBreak := True;
finally
ACell.Free;
end;
j := j + 1;
end;
i := i + 1; j := 1;
end;
Автор: X11
Дата сообщения: 19.12.2010 09:51

Цитата:
Он мне говорит
undeclared identifier : 'TcxHorzTextAlign'
undeclared identifier : 'TcxVertTextAlign'


А поискать, где объявлены эти типы почему нельзя?

А про Ctrl+Shift+A тоже не в курсе?

добавь в USES cxSSTypes
Автор: RomanDaemon
Дата сообщения: 19.12.2010 15:44
vladman
Да, спасибо за пример.
Все работает, только работы прибавилось... =)
Автор: vladman
Дата сообщения: 20.12.2010 01:49
RomanDaemon

Цитата:
Все работает, только работы прибавилось...

Ну тут уж нужно выбирать - либо с работой чтоб работало, либо без работы чтоб не работало
Автор: RomanDaemon
Дата сообщения: 20.12.2010 02:19
По ходу еще встала задача.
Надо что бы перед Requery всех DataSet, вид грида и вьюх сохранялся, а после восстанавливался. Все сделал и сохранение/раскрытие expanded detail, и переключение активного на активный таб, и все это для вьюхи с группировками. Но вот вылезла проблема, о которой много чего написано, но найти однозначное решение не могу. Это фокус. Пока обхожусь тем, что фокус сохраняется через bookmark датасета и встает на master вьюху. Как его сохранить для detail и туда где был поместить (без создания клонов всех вьюх), не могу понять - куча свойств, касающихся фокуса, многие проверил - не нашел подходящих условий.

Сохранение делаю так (может кому пригодится):


Код:
type TGCExpand = record
Caption : String;
Expanded : Boolean;
Level: Integer;
end;
var AllExp : array of TGCExpand;

procedure TSamplesForm.storegridinfo;
var I: integer;
begin
AllExp:=NIL;
for I := 0 to cxGrid2DBTableView2.ViewData.RowCount - 1 do
begin
if (cxGrid2DBTableView2.ViewData.Rows[ I ].Expanded)
then
begin
SetLength( AllExp , Length( AllExp ) + 1 );
AllExp[ Length( AllExp ) - 1 ].Caption := cxGrid2DBTableView2.ViewData.Rows[ I ].Values[0];
AllExp[ Length( AllExp ) - 1 ].Expanded := cxGrid2DBTableView2.ViewData.Rows[ I ].Expanded;
if (cxGrid2DBTableView2.ViewData.Rows[ I ] is TcxGridMasterDataRow) then
AllExp[ Length( AllExp ) - 1 ].Level := cxGrid2DBTableView2.ViewData.Rows[ I ].AsMasterDataRow.ActiveDetailIndex
else
AllExp[ Length( AllExp ) - 1 ].Level := -1;
end;
end;
end;

procedure TSamplesForm.restoregridinfo;
var
I,J: integer;
Caption_1: string;
begin
for I := 0 to Length( AllExp ) - 1 do
begin
for J := 0 to cxGrid2DBTableView2.ViewData.RowCount - 1 do
begin
Caption_1 := cxGrid2DBTableView2.ViewData.Rows[ J ].Values[0];
if (AllExp[ I ].Caption = Caption_1) then
begin
cxGrid2DBTableView2.ViewData.Rows[ J ].Expanded := True;
if AllExp[ I ].Level>=0 then cxGrid2DBTableView2.ViewData.Rows[ J ].AsMasterDataRow.ActiveDetailIndex := AllExp[ I ].Level;
end;
end;
end;
end;
Автор: BlackVetal
Дата сообщения: 20.12.2010 05:53
RomanDaemon
я так понимаю после редактирования строки detail, значения сохраняются в БД. после этого нужно сделать перерасчет master строки и отобразить?
вообще я делал все без requery. я использую BindingContext. этот BindingContext хранит указатель на фокус и посути через этот указатель можно сделать перерасчет хоть всей строки master? хоть отдельного ее поля.
Автор: Yuri2008
Дата сообщения: 20.12.2010 07:01
Добрый день! поиском не нашел, cxgrid отображает поле содержащее тескт, соответственно в нем символы переноса строк, символы конца строки итп
в гридке спецсиволы отображаются не красиво.
Вопрос: Подскажите простой способ убрать отображение этих символов?
Заранее спасибо!
Автор: neznayka3
Дата сообщения: 20.12.2010 07:08
интересует ответ на вопрос CommonJet


Цитата:
Проверяя состояния чекбоксов формирую SQL-запрос и и вызываю процедуру. Т.е. при клике на любой чекбокс необходимо ОДИН раз выполнить процедуру. Для этого использую NodeCheckChanged.
Вот тут и затык выходит. Если, например, кликнуть на чекбокс у родителя (см. скрин) то событие выполнится столько раз, сколько потомков у этого родителя. В данном случае я получаю 4 события и соответственно SQL-запрос выполняется последовательно 4 раза.
В идеале необходимо как-то отследить последнее событие OnNodeCheckChanged и после него выполнить SQL-запрос

ответа тоже не нашел.
Автор: DumnedAspid
Дата сообщения: 20.12.2010 15:17
Привет всем!

Кто-нибудь юзал TcxRichEdit?
Есть ли глюки у компонента?
Имеет ли смысл использовать его вместо TRxRichEdit?

Добавлено:
Yuri2008

Цитата:
Добрый день! поиском не нашел, cxgrid отображает поле содержащее тескт, соответственно в нем символы переноса строк, символы конца строки итп
в гридке спецсиволы отображаются не красиво.
Вопрос: Подскажите простой способ убрать отображение этих символов?

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

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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