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

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

Автор: vladman
Дата сообщения: 22.03.2010 10:30
fortezza

Цитата:
надо чтобы в ячейке при клике отображались три эти варианта, а по выбору подставлялся соответствующий ключ

Попробуйте ImageComboBox. В нем также вашим значениям можно иконки назначить.
Автор: AvGSoft
Дата сообщения: 22.03.2010 13:48
fortezza
Если чтобы все отображались то наверное лучше у колонки Properties = RadioGroup и туда уже значения вбить, хотя вариант vladman по приятнее будет
Автор: OwnerZ
Дата сообщения: 22.03.2010 15:04
Добрый день.

Извините если повторяюсь но не могу найти ответ на решение такого вопроса.

Если добавляешь запись пока не нажмешь Enter будет выскакивать ошибка что у запись пустая (Null). Как только нажал руками Enter все ок.

Подскажите пожалуйста как вы боретесь с этой проблемой???

Спасибо.
Автор: AvGSoft
Дата сообщения: 22.03.2010 15:34
OwnerZ
Куда добавляешь, в базу? Какой компонент используешь? Уточни пожалуйста вопрос.
Автор: volser
Дата сообщения: 22.03.2010 16:52
OwnerZ
Прочитал два раза. Ничего не понял.
Автор: fortezza
Дата сообщения: 22.03.2010 18:38

Цитата:

fortezza

Цитата:в ячейке


таблицы?

Цитата:cxComboBox


у него есть свойство items, туда и вписать элементы

да в ячейке таблицы, понятное дело что в items. но какие именно значения или каким образом? если 1,2,3, то пользователь не будет видеть что именно он вибирает, если добавить "рубль, евро, доллар", то не будет возможности сохранить выбранные данные, т. к. ячейка не тектового типа, а int и принимает только ключ
Автор: Cryogen2003
Дата сообщения: 22.03.2010 18:40
vladman
Есть ли какая-нибудь возможность в combobox или lookupcombobox переносить слишком длинные строчки?
Автор: fortezza
Дата сообщения: 22.03.2010 18:41
во блин. не увидела другие ответы. буду пробовать
Автор: korobovmax
Дата сообщения: 22.03.2010 18:42
fortezza, vladman предложил отличный вариант для ваших нужд.
В ImageComboBox для каждого элемента есть:
поле, значение которого записывается в соответствующее поле записи при выборе элемента,
поле, значение которого отобрается на экране;
поле, значение которого используется как индекс для выбора картинок в TImageList.
Автор: vladman
Дата сообщения: 22.03.2010 21:16
Cryogen2003

Цитата:
Есть ли какая-нибудь возможность в combobox или lookupcombobox переносить слишком длинные строчки?

На вскидку, можно попробовать использовать cxExtLookupComboBox, и у View, который будет источником данных для этого cxExtLookupComboBox, необходимому (lookup) полю присвоить в качестве свойства *Properties* значение *Memo* с WordWrap = True. Также не забыть для этого View установить свойство *OptionView.CellAutoHeight* = true. Попробуйте, думаю такой подход должен решить проблему.
Автор: Cryogen2003
Дата сообщения: 23.03.2010 09:23
vladman
Понятно Значит такого они не предусмотрели
Автор: vladman
Дата сообщения: 23.03.2010 11:46
Cryogen2003

Цитата:
Понятно Значит такого они не предусмотрели

Да, в combobox или lookupcombobox это явно не предусмотрено, но если воспользоваться cxImageComboBox, то достаточно установить его свойство Properties.MultiLineText = True, и все будет так как вы хотите.
Автор: Cryogen2003
Дата сообщения: 23.03.2010 11:49
vladman
Замечательно. Осталось только сделать так, чтобы не выводил там картинок и не отводил место под картинки
Автор: vladman
Дата сообщения: 23.03.2010 12:01
Cryogen2003

Цитата:
Осталось только сделать так, чтобы не выводил там картинок и не отводил место под картинки

Не устанавливайте свойства Images/LargeImages и cxImageComboBox визуально ничем не будет отличаться от cxComboBox
Автор: Cryogen2003
Дата сообщения: 23.03.2010 12:05
vladman
Странно, images вроде не установлен, но все равно есть пикселей 5 задел наверное.
Автор: vladman
Дата сообщения: 23.03.2010 12:34
Cryogen2003
Посмотрите пример
[more]
Код: object Form12: TForm12
Left = 0
Top = 0
Caption = 'Form12'
ClientHeight = 117
ClientWidth = 147
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object cxImageComboBox1: TcxImageComboBox
Left = 16
Top = 24
Properties.Items = <
item
Description = 'qwerqwerqwer qwerjq eruq er'
ImageIndex = 0
Value = 0
end
item
Description = 'fkb we rcjtqwlr'
Value = 1
end
item
Description = 'q123412342345'
Value = 2
end
item
Description = 'wertwct 2 423pu c5p23u p523 p45upuup'
Value = 3
end>
Properties.MultiLineText = True
TabOrder = 0
Width = 121
end
object cxComboBox1: TcxComboBox
Left = 16
Top = 51
Properties.DropDownListStyle = lsFixedList
Properties.Items.Strings = (
'qwerqwerqwer qwerjq eruq er'
'fkb we rcjtqwlr'
'q123412342345'
'wertwct 2 423pu c5p23u p523 p45upuup')
TabOrder = 1
Width = 121
end
object cxButton1: TcxButton
Left = 62
Top = 78
Width = 75
Height = 25
Caption = 'Close'
TabOrder = 2
OnClick = cxButton1Click
end
end
Автор: Cryogen2003
Дата сообщения: 23.03.2010 12:37
vladman
Гм, видимо какое-то свойство установил, пошел смотреть исходник своего dfm
Автор: fortezza
Дата сообщения: 23.03.2010 14:23
могу ли я каким-либо образом закрепить колонку в cxGrid, чтобы даже при прокрутке горизонтального скролла она не двигалась?
Автор: vladman
Дата сообщения: 23.03.2010 14:43
fortezza

Цитата:
могу ли я каким-либо образом закрепить колонку в cxGrid, чтобы даже при прокрутке горизонтального скролла она не двигалась?

Можете. Используйте cxGridDBBandedTableView и у нужного Band установите свойство FixedKind в fkLeft/fkRight.
ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_cd_Bands.htm
ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_TcxGridBand_FixedKind.htm
Автор: X11
Дата сообщения: 24.03.2010 01:22
Вопрос по tdxBar.

Есть код, который добавляет кнопки на панель.
[more]
procedure TfmMain.CreateFormButton(form1:TForm);
var
//ABarManager : TdxBarManager;
ABar : TdxBar;
NewButton : TdxBarButton;
NewItemLink : TdxBarItemLink;
begin
inc(iButtonsCount);
// ABarManager := GetBarManagerByForm(self);
ABar := Bar1;
NewButton := TdxBarButton.Create(self);

NewItemLink := ABar.ItemLinks.Add;
NewItemLink.Item := NewButton;
NewItemLink.Item.Tag := form1.Handle;

NewButton.Tag := form1.Handle;
NewButton.Name := 'dxButton'+IntToStr(NewButton.Tag);
NewButton.Caption := form1.Caption + '[' + IntToStr(iButtonsCount) + ']';
NewButton.Hint := form1.Caption;
NewButton.OnClick := dxBarButtonClick;
NewButton.ButtonStyle := bsChecked;
NewButton.Down := true;
NewButton.PaintStyle := psCaptionGlyph;
NewButton.GroupIndex := 1;
NewButton.Glyph.Width := 16;//GetSystemMetrics(SM_CXSMICON);
NewButton.Glyph.Height := 16;//GetSystemMetrics(SM_CYSMICON);
NewButton.Glyph.Canvas.Draw(0,0,form1.Icon);
ABar.Control.RepaintBar;
end;
[/more]

Но теперь у меня tdxBar в качестве главного меню. У главного меню есть пункты меню, например, Операции, Сервис, Справочники со своими подменю.

Мне нужно программно в цикле добавлять в нужный главный пункт меню (Операции, Сервис или Справочники) ещё подменю.

Допустим, у меню Справочники есть меню Справочник-1 и Справочник-2. Теперь при старте приложения будет загружаться ещё dll-ка.

В коде программы есть функция загрузки этих плагинов, но как правильно рассовать по существующим пунктам главного меню запуск dll...


Вот код:
[more]
procedure TfmMain.LoadPlugins();
Var
i, iDllHandle:integer;
PlugExec : procedure(sender :TObject) of object;
PlugType : function : integer; //Объявление функции, которая будет возвращать тип плугина
GetConnectInfo : procedure(fbclient,DB:PChar;db_connected:boolean);
GetUserData : procedure(UID:integer;UserName:PChar);
MenuCaption : function : PChar;

//для вывода кнопки плагина
act: TAction;
NewButton: TdxBarButton;
NewItemLink: TdxBarItemLink;
begin
iDllHandleAreas := 0;
slPlagins := TStringList.Create;
slPlaginsHandles := TStringList.Create;
Log(IncludeTrailingPathDelimiter(sAppPath2)+'Plugins\');
FindPlugins(IncludeTrailingPathDelimiter(sAppPath2)+'Plugins\');

Log('Найдено:' + IntToStr(slPlagins.Count));
if slPlagins.Count <= 0 then begin
FreeAndNil(slPlagins);
exit;
end;
LOG(self.Name+' Загрузка плагинов');
//если найдены плагины, то пытаемся их загрузить
for I := 0 to slPlagins.Count - 1 do begin
//iDllHandleAreas
iDllHandle := LoadLibrary(PChar(slPlagins[i]));
slPlaginsHandles.Add(IntToStr(iDllHandle));

if iDllHandle <> 0 then begin
@plugExec := GetProcAddress(iDllHandle,'PluginExec');
@plugType := GetProcAddress(iDllHandle,'PluginType');
@GetConnectInfo := GetProcAddress(iDllHandle,'GetConnectInfo');
@GetUserData := GetProcAddress(iDllHandle,'GetUserData');

GetUserData(UserData.UserID,PChar(UserData.UserName));
GetConnectInfo(PChar(DM.fibDB.LibraryName),PChar(DM.fibDB.DBName),DM.fibDB.TestConnected);

NewButton := TdxBarButton.Create(self);

@MenuCaption := GetProcAddress(iDllHandle,'MenuCaption');
act := TAction.Create(am1);
act.ActionList := am1;
act.onExecute := plugExec;
act.caption := MenuCaption;
act.Hint := MenuCaption;
if MenuCaption = 'Участки [Make It! Innovations]' then
iDllHandleAreas := iDllHandle;

NewButton.Action := act;

//раньше в главное
//PlugType возвращает индекс, по этому индексу определяем в какой пункт меню ставить новый пункт
// mmMainMenu.Items.Items[PlugType].Add(NewItem);

ДАЛЬШЕ НЕ МОГУ СООБРАЗИТЬ

// NewItemLink := MainMenu.ItemLinks.Add;

// NewItemLink := MainMenu.ItemLinks.

// if plugType = 3 then
// NewItemLink := mmApart.ItemLinks.Add;

NewItemLink.Item := NewButton;

Log(self.Name+' Плагин успешно загружен: '+MenuCaption);

end;
end;//for
end;
[/more]

Может на картинке будет понятнее:


Нужно добавить в конец списка ещё один пункт меню.

Если я использую стандартное главное меню, то всё в норме, но приспичило установить dxBarManager.... и тут засада
Автор: vladman
Дата сообщения: 24.03.2010 01:52
X11
Вроде бы и написали много сообщений, и даже за 4 года, но совсем забыли про море, т.е. more.
Цитата:
Если я использую стандартное главное меню, то всё в норме, но приспичило установить dxBarManager.... и тут засада

Так в чем/где, собственно, засада? Из того количества пикселей, которое занимает ваше сообщение на экране, засаду так сразу и не увидишь. ) Как в том анекдоте - "..., а пальцем покажи."
Автор: X11
Дата сообщения: 24.03.2010 10:14
Исправлюсь. Забыл про more (просто никогда не использовал).

Вопрос в том, как мне правильно добавлять подпункты меню к нужным пунктам?

Плагин передаёт индекс главному приложению, согласно этому индексу нужно установить в главном меню новый пункт для этого плагина.
Автор: vladman
Дата сообщения: 24.03.2010 10:50
X11

Цитата:
Вопрос в том, как мне правильно добавлять подпункты меню к нужным пунктам?

How to perform full creation at runtime
Question Details: Create/Destroy a Multilevel SubMenu at runtime
Question Details: Adding BarButton and Separators at runtime
Автор: wbsg
Дата сообщения: 24.03.2010 11:30
Собственно, достаточно просто.

Код:
var
ItemLink: TdxBarItemLink;
mnItem: TdxBarSubItem;
i: Integer;
isFound: Boolean;
MenuTag: Integer;
begin
{ ищем нужный пункт меню }
mnItem := nil;
isFound := False;
MenuTag := 1; { Tag кнопки, которую нужно найти }
for i := 0 to mnMainMenu.ItemLinks.Count -1 do
begin
ItemLink := mnMainMenu.ItemLinks[i\];

if ItemLink.Item.Tag = MenuTag then
begin
isFound := True;
mnItem := TdxBarSubItem(ItemLink.Item);
break;
end;
end;

if isFound then
begin
ItemLink := mnItem.ItemLinks.Add;
ItemLink.Item := TdxBarButton.Create(Self);
ItemLink.Item.Caption := 'Новый plugin';
{ добавить по вкусу
ItemLink.Item.OnClick := ItemClick;
...
}
end;
Автор: X11
Дата сообщения: 25.03.2010 21:04

Цитата:
Собственно, достаточно просто.

А у Вас этот код работает??

в этой строке
if ItemLink.Item.Tag = MenuTag then
вываливается исключение

Project ... raised exception class EAccessViolation with message 'Access violation at address 00D7CD78 in module '...'. Read of address 0000000C'.


Добавлено:
Всё работает. Извиняюсь.
Пропустил
ItemLink := mnMainMenu.ItemLinks[i];
Автор: wbsg
Дата сообщения: 26.03.2010 10:35

Цитата:

в этой строке  
if ItemLink.Item.Tag = MenuTag then  
вываливается исключение


Ссылка на демо под ковриком #
Автор: OwnerZ
Дата сообщения: 26.03.2010 15:18
Добрый день подскажите как задать фильтр в Cxgrid программно.

Не могу найти чем задается чтоб мне отфильтровало по нужной мне записи и если надо указать нужному мне FildName ищу и не вижу.

Спасибо.

Автор: X11
Дата сообщения: 26.03.2010 15:29
procedure TfmMain.SetFilterByMaxLCD();
Var
MaxLCD:TDateTime;
begin
try
dbgReklama.DataController.Filter.Active := false;
actResetFilterGroupSortExecute(nil);
MaxLCD := Now;
dbgReklama.DataController.Filter.BeginUpdate;
WITH dbgReklama.DataController.Filter.Root do begin
Clear;
AddItem(dbgReklamaLCD, foGreater, MaxLCD, DateTimeToStr(MaxLCD));
end;
dbgReklama.DataController.Filter.Active := true;
finally
dbgReklama.DataController.Filter.EndUpdate;
end;
end;


procedure TfmMain.SetFilterByDateInputndMetodInput(DateBefor, DateAfter:TDate;id_mi:variant);
begin
try
dbgReklama.DataController.Filter.Active := false;
actResetFilterGroupSortExecute(nil);
dbgReklama.DataController.Filter.BeginUpdate;
WITH dbgReklama.DataController.Filter.Root do begin
Clear;
AddItem(dbgReklamaINPUT_DATE2, foGreaterEqual, DateBefor, DateToStr(DateBefor));
AddItem(dbgReklamaINPUT_DATE2, foLessEqual, DateAfter, DateToStr(DateAfter));
AddItem(dbgReklamaID_METODINPUT, foEqual, id_mi, VarToStr(id_mi));
end;
dbgReklama.DataController.Filter.Active := true;
finally
dbgReklama.DataController.Filter.EndUpdate;
end;
end;
Автор: AvGSoft
Дата сообщения: 26.03.2010 17:16
Кто делал подобие XtraTabbedMdiManager под VCL, в TMS есть, а у девовцев не нашел
Автор: X11
Дата сообщения: 27.03.2010 13:25
В последних версиях девочек новая принтосистема. Большая часть кнопок без перевода. Есть ли более новый ini-файл с переводом. Или подскажите, как бы правильно добавить перевод в существующий ini файл. Можно было бы перевести и сюда выложить, и feandy отправить для его замечательного инстралла

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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