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

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

Автор: marser
Дата сообщения: 05.07.2011 17:34
tanaseduard

Цитата:
Parent:=TWinControl(AOwner);

Что написали, то и получили. В Вашем случае, AOwner - всегда форма. Уберите это строчку, а Parent автоматом присвоится в методах предка.
Автор: tanaseduard
Дата сообщения: 05.07.2011 17:52
marser
Если убрать эту строку то получаю AE
"Control '' has no parent Window".
Ругаеться на этапе
FCustomForm:=TfmCustomMessengers.CreateParented(Self.Handle);
Автор: marser
Дата сообщения: 05.07.2011 18:11
tanaseduard
FCustomForm.Enabled, FCustomForm.Show? FCustomForm.Show, уж точно нужно не в конструкторе. Попробуйте использовать обработчики сообщений СM_Enаbled, CM_Visible (пишу по-памяти, боюсь ошибится, посмотрите в TControl). Это общие вопросы написания компонент и к DevExpress имеют мало отношения.
Автор: tanaseduard
Дата сообщения: 05.07.2011 18:15
marser
Спасибо, я случайно создал в этой ветке, уже перепостил, у уже нашел решение.
Перенес все не в конструктор в в CreateWND.
Помогло.
Автор: fortezza
Дата сообщения: 06.07.2011 14:00
здравствуйте!
для колонок с определенным Properties хочу реализовать своеобразный ввод:
если происходит ввод текста - вызывается форма
если удаление, то
если выделен весь текст - удалить его
иначе вернуть первоначальное значение и выделить весь текст

вот код:

Код:
procedure TVetBaseForm.cxGridTVEditKeyDown(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem;
AEdit: TcxCustomEdit; var Key: Word; Shift: TShiftState);
var col : TcxGridDBColumn;
tv : TcxGridDBTableView;
begin

if Key in [8, 46] then
begin

tv := TcxGridDBTableView(Sender);
if (tv.Controller.FocusedRow is TcxGridFilterRow) then Abort;
col := TcxGridDBColumn(tv.Controller.FocusedColumn);

if (col.Properties is TcxCustomButtonEditProperties) then
with TcxCustomTextEdit(tv.Controller.EditingController.Edit) do
begin
if Length(SelText) < Length(VarToStr(InternalEditValue)) then
begin
// здесь будет возврат старого значения
SelectAll;
end
else Clear;
end;

end;
end;
Автор: X11
Дата сообщения: 06.07.2011 14:18
Есть EditingValue и EditValue
вот в EditValue ещё живет старое значение пока юзер не перешёл на др. запись или не нажал Enter.
При этом свойство ImmediatePost должно быть в False
Автор: fortezza
Дата сообщения: 06.07.2011 15:20
X11, и как выполнить присвоение?
EditValue := EditValue; ?

А ещё, решила посмотреть содержимое EditValue, EditingValue, InternalEditValue в событии cxColBEPropChange:

Код:
procedure TVetBaseForm.cxColBEPropChange(Sender: TObject);
var col : TcxGridDBColumn;
tv : TcxGridDBTableView;
begin

tv := TcxGridDBTableView(TcxGridSite(TControl(Sender).Parent).GridView);
if (tv.Controller.FocusedRow is TcxGridFilterRow) then Abort;
col := TcxGridDBColumn(tv.Controller.FocusedColumn);

if (col.Properties is TcxCustomButtonEditProperties) then
with TcxCustomTextEdit(tv.Controller.EditingController.Edit) do
begin
main.StatusBar1.Panels[0].Text := ' EditValue := ' + VarToStr(EditValue) +
' EditingValue := ' + VarToStr(EditingValue) + ' InternalEditValue := ' + VarToStr(InternalEditValue) + ' EditingText := ' + EditingText;
EditValue := InternalEditValue;
SelectAll;
end;
end;
Автор: X11
Дата сообщения: 06.07.2011 15:30

Цитата:
но все значения одинаковые!

одинаковые новые или одинаковые старые?


Цитата:
Но как этот код, который выполняется после того какя сохраняю текст может сказываться на EditValue?

не понял вопроса

Добавлено:
Есть TcxExtLookupCombobox. В нём выпадает cxGrid из репозитория с двумя колонками. Но выпадающий список узкий, а колонки широкие. Как заставить выпавшее окно быть шире и как запомнить/восстанавливать ширину выпавшего окна?
Автор: marser
Дата сообщения: 06.07.2011 15:56
X11

Цитата:
Есть TcxExtLookupCombobox. В нём выпадает cxGrid из репозитория с двумя колонками. Но выпадающий список узкий, а колонки широкие. Как заставить выпавшее окно быть шире и как запомнить/восстанавливать ширину выпавшего окна?

У cxExtLookupCombobox есть свойство PopupWindow(потомок TCustomForm), и есть события Properties.OnInitPopup и Properties.OnCloseUp
Автор: fortezza
Дата сообщения: 06.07.2011 15:59
одинаково старые, но если закомментировать последние две строчки

Код:
EditValue := InternalEditValue;
SelectAll;
Автор: X11
Дата сообщения: 06.07.2011 16:04
Ну так закоментируй EditValue := InternalEditValue;
и тогда у тебя будет
EditValue со старым значением, а InternalEditValue с новым

не пойму в чем проблема

Добавлено:

Цитата:
X11

Цитата:
Есть TcxExtLookupCombobox. В нём выпадает cxGrid из репозитория с двумя колонками. Но выпадающий список узкий, а колонки широкие. Как заставить выпавшее окно быть шире и как запомнить/восстанавливать ширину выпавшего окна?

У cxExtLookupCombobox есть свойство PopupWindow(потомок TCustomForm), и есть события Properties.OnInitPopup и Properties.OnCloseUp


вот код

Код: procedure TfmArendaAdd.elcbMediatorsPropertiesInitPopup(Sender: TObject);
begin
elcbMediators.PopupWindow.Width := ArendaRepositoryMediatorsMEDIATOR_NAME.Width + ArendaRepositoryMediatorsTYPE_NAME.Width + 10;
end;
Автор: linker_2009
Дата сообщения: 06.07.2011 16:22
X11
<YoucxExtLookupComboBox>.Properties.DropDownWidth:=<neededwidth>; не то ?
Автор: X11
Дата сообщения: 06.07.2011 16:32
Вот так получилось:


Код:
implementation

uses ....;

{$R *.dfm}

type
TcxCustomEditPopupWindowAccess = class(TcxCustomEditPopupWindow);

....

procedure TfmArendaAdd.elcbMediatorsPropertiesInitPopup(Sender: TObject);
var
APopupEdit: TcxPopupEditPopupWindow;
begin
APopupEdit := TcxPopupEditPopupWindow(TcxExtLookupComboBox(Sender).PopupWindow);//приводим всплывающее окно к типу TcxPopupEditPopupWindow из TcxCustomPopupEditPopupWindow

TcxCustomEditPopupWindowAccess(APopupEdit).ResizePopupWindow(APopupEdit.Left,
APopupEdit.Top,
ArendaRepositoryMediatorsMEDIATOR_NAME.Width + ArendaRepositoryMediatorsTYPE_NAME.Width + 50,
APopupEdit.Height);

end;
Автор: linker_2009
Дата сообщения: 06.07.2011 16:39

Цитата:
<YoucxExtLookupComboBox>.Properties.DropDown.... есть ещё несколько свойств и методов

Да, но не все работет. Например, если DropDownSizeable:= true и у вьюхи поставлена автоширина колонок, то вьюха у меня не выпадает.
Автор: X11
Дата сообщения: 06.07.2011 16:53
Вот мои свойства:


в коде вообще ничего не прописывал, хватило установить DropDownAutoSize в True
Автор: unikum
Дата сообщения: 06.07.2011 19:42
В риббоне ставлю несколько dxBarSpinEdit один под другим. Но поскольку у них свойство Caption разное они начинают плясать лесенкой. Свойство width влияет только на ширину самого поля редактирования и подгонять для каждого свое значение неправильно.
Кто нить знает как их выровнять по ширине?
Автор: linker_2009
Дата сообщения: 06.07.2011 20:09
unikum
Попробуйте у всех поставить Aling:=iaClient;
Автор: fortezza
Дата сообщения: 07.07.2011 06:58


X11,проблема в том, что я вывожу значения до присвоения



Добавлено:

Цитата:
Ну так закоментируй EditValue := InternalEditValue;
и тогда у тебя будет
EditValue со старым значением, а InternalEditValue с новым

не пойму в чем проблема


X11,проблема в том, что не зависимо от того, какой из этих двух блоков кода я буду выполнять, значение main.StatusBar1.Panels[0].Text не должно менятся, но оно меняется


Код: procedure TVetBaseForm.cxColBEPropChange(Sender: TObject);
var col : TcxGridDBColumn;
tv : TcxGridDBTableView;
begin

tv := TcxGridDBTableView(TcxGridSite(TControl(Sender).Parent).GridView);
if (tv.Controller.FocusedRow is TcxGridFilterRow) then Abort;
col := TcxGridDBColumn(tv.Controller.FocusedColumn);

if (col.Properties is TcxCustomButtonEditProperties) then
with TcxCustomTextEdit(tv.Controller.EditingController.Edit) do
begin
main.StatusBar1.Panels[0].Text := ' EditValue := ' + VarToStr(EditValue) +
' EditingValue := ' + VarToStr(EditingValue) + ' InternalEditValue := ' + VarToStr(InternalEditValue) + ' EditingText := ' + EditingText;
EditValue := InternalEditValue;
SelectAll;
end;
end;
Автор: X11
Дата сообщения: 07.07.2011 08:48

Цитата:
Добавлено:
аа.. кажется я знаю в чем проблема

EditValue := InternalEditValue;

повторно вызывает событие cxColBEPropChange.. может можно сделать так чтобы этого не происходило?


на время присвоения, т.е. перед
EditValue := InternalEditValue;

установи событие грида в nil, а потом верни обратно
Автор: unikum
Дата сообщения: 07.07.2011 14:08
2 linker_2009

Алилуя! Спасибо добпый человек. Что-то вообще не подумал бо не сильно логично
Автор: androidx55
Дата сообщения: 07.07.2011 16:28
Народ нужна ваша помощь в осуществлении поиска в cxDBTreeList. Написал следующее поиск производится только до первого совпадения например в cxDBTreeList у меня есть такие названия Налог на зп , Налог НДС, Налог на ввоз и т.д. Своим поиском я попадаю в первую ноду Налог на зп и дальше поиск не осушествляется, как реализовать так, чтоб после нахождения первой записи по нажатию на Enter или другую клавишу находились и другие ноды и курсор перемещался на нее. Заранее благодарен за помощь


Код: procedure TFmStRash.SearchEditKeyPress(Sender: TObject; var Key: Char);
var
Node: TcxTreeListNode;
NodeLast: TcxTreeListNode;
begin

Node := ClassTree.FindNodeByText(SearchEdit.Text, NameColumn , nil, False, True);
if Node <> nil then
begin
Node.Expanded := True;
Node.Focused := True;
NodeLast:=Node ;
if Key = #13 then
begin
Node := ClassTree.FindNodeByText(SearchEdit.Text, NameColumn , NodeLast, False, True);
Node.Expanded := True;
Node.Focused := True;
end;
end;

end;
Автор: linker_2009
Дата сообщения: 07.07.2011 18:55
androidx55
может такой вариант подоидет

Код:
procedure TFmStRash.SearchEditKeyPress(Sender: TObject; var Key: Char);
begin
ClassTree.OptionsBehavior.IncSearch := True;
ClassTree.OptionsBehavior.IncSearchItem := NameColumn ;
ClassTree.OptionsBehavior.ExpandOnIncSearch := True;
ClassTree.SearchingText := SearchEdit.Text;
ClassTree.FindNext(True);
end;
Автор: mdid
Дата сообщения: 12.07.2011 10:41
народ а помогите решить проблему...
есть dbview надо сформировать отчет путем простого выбора элементов..создал колонку без заданного fieldname и типом checkbox..но не реагирует на изменения...мультиселект не вариант ибо меня затопчут за такую реализацию...надо именно чекбоксом...в запросе добавить колонку тоже не вышло...то есть добавить вышло а внести изменения нет...единственный вариант(что мне оч не хочется) ввести в таблицу поле типа bit и там выделять...
посему вопрос можно ли как то методами девок решить сию задачу...проще говоря как в dbgrid хранить поле не из запроса

Обновил
мм...и хотя начальство дало добро на мультиселект...на будущее хотелось бы знать может грид такие или нет?
Автор: vladman
Дата сообщения: 13.07.2011 10:06
mdid

Цитата:
народ а помогите решить проблему...

Посмотрите здесь
Автор: X11
Дата сообщения: 13.07.2011 15:47
Кто-нибудь пробовал Locked View Image в cxGrid? Не могу понять, как это реализовать?
Автор: mdid
Дата сообщения: 13.07.2011 17:11
vladman
пасиб...но в текущем гриде не помогло..мож какие то настройки мешают..ну да лана...в любом случае пасиб взял на заметку

тут родилась еще одна проблема..есть грид и 2 вьюхи...активными становятся по очереди в процессе выбора усером...так вот вылезла проблема при которой не понятно почему на одной из вьюх пропадают фильтрации по колонками..то есть при заполненном гриде при нажатии на фильтр по колонке имеются доступные значения только "Все" "Выбор" "Пустые" и "не пустые" и все..думал косяки какие то..удалил вьюху в которой не показывался фильтр...пересоздал все..так теперь зараза на другой вьюхе пропал фильтр..что за приведения? кто то встречал такое?
Автор: golkanavt
Дата сообщения: 13.07.2011 18:36
Есть среди присутствующих спецы по девам в версии ASP.NET?
Автор: mdid
Дата сообщения: 14.07.2011 08:14
отвечу на свой вопрос..при установленной галке gridmode пропадают фильтры
Автор: X11
Дата сообщения: 14.07.2011 09:02

Цитата:
отвечу на свой вопрос..при установленной галке gridmode пропадают фильтры

Советую прочитать про gridmode и зачем он нужен

Добавлено:
Установил Dev 2011.1.3

И теперь компилятор ругается на CheckStates. Говорит, что незадекларированный идентификатор.


Код: function GetComboChecks(cxCheckComboBoxProperties: TcxCheckComboBoxProperties; sDelim: string = ','): string;
Var
i: Integer;
begin
with cxCheckComboBoxProperties do
begin
items.BeginUpdate;
try
for I := 0 to items.Count - 1 do
if CheckStates[i] = cbsChecked then
result := IntToStr(items[i].Tag) + sDelim + result;

if result <> '' then //получаем 101,12,1024,
Delete(result, Length(result), 1);//удаляем последнюю запятую

finally
items.EndUpdate;
end;//try
end;//with
//возвращаем список из выбранных ID через запятую: 101,12,1024
end;
Автор: X11
Дата сообщения: 14.07.2011 13:23
Решил проблему:

Переделал с использованием CalculateCheckStates



Код: function GetComboChecks(cxCheckComboBoxProperties: TcxCheckComboBoxProperties; vValues: Variant; sDelim: string = ','): string;
Var
i: Integer;
ACheckStates: TcxCheckStates;
begin
with cxCheckComboBoxProperties do
begin
items.BeginUpdate;
try


//рассчитываем, что выбрал пользователь
CalculateCheckStates(vValues, items, EditValueFormat, ACheckStates);

for I := 0 to items.Count - 1 do
if ACheckStates[i] = cbsChecked then
result := IntToStr(items[i].Tag) + sDelim + result;

if result <> '' then //получаем 101,12,1024,
Delete(result, Length(result), 1);//удаляем последнюю запятую

finally
items.EndUpdate;
end;//try
end;//with
//возвращаем список из выбранных ID через запятую: 101,12,1024
end;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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