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

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

Автор: volser
Дата сообщения: 16.10.2009 14:19
TORSER7

Цитата:
Да знаю,что нет. Хотелось бы получить другой ответ.


Цитата:
Другими словами, требуется ввести целое (именно целое) число с ограничением
разрядности MaxLength. И чтобы вставку из буфера обмена запретить.
Казалось,простая задача.А не получается.

Какой из этих пунктов не получается?
Автор: SANiMirrorOfLight
Дата сообщения: 16.10.2009 14:25
f3ka
Спасибо, очень удобно, сразу отпала необходимость самому реализовывать кучку функций.

TORSER7

А если с использованием маскэдита?
Автор: TORSER7
Дата сообщения: 16.10.2009 14:36
volser


Цитата:
Другими словами, требуется ввести целое (именно целое) число с ограничением
разрядности MaxLength. И чтобы вставку из буфера обмена запретить.
Казалось,простая задача.А не получается.


Не получается все вместе.
-в TcxTextEdit присутствует вставка из буфера обмена;
-в TcxCalcEdit допускает вводить мантиссу,да и ярлык калькулятора не нужен;
-в TcxCurrencyEdit полный набор "недостатков";
-TcxMaskEdit тоже не смог полноценно настроить.

Вот и подумал,что кто-то на эти грабли уже наступал.

Автор: volser
Дата сообщения: 16.10.2009 16:18
TORSER7

Цитата:
-в TcxTextEdit присутствует вставка из буфера обмена;

Чтобы не появлялось стандартное контекстное меню можно присвоить PopupMenu свое меню. Также нужно запретить горячие клавиши вставки данных из буфера, событие OnKeyDown.
Автор: sldaac
Дата сообщения: 16.10.2009 17:42
TORSER7


Цитата:
-в TcxCurrencyEdit полный набор "недостатков";

странно, делаеш
DisplayFormat и max и min и все работает
про буфер написал volser
Автор: AK_666
Дата сообщения: 16.10.2009 22:07
vladman

Куда сырцами кинуть?
Автор: vladman
Дата сообщения: 17.10.2009 11:38
AK_666

Цитата:
Куда сырцами кинуть?

На любой файлообменник.
Автор: tatbesidovska51
Дата сообщения: 17.10.2009 12:46
Добрый день, такая вот проблемка у меня: на форме есть GridControl, в нем отображается главная таблица и дочерняя, главную я могу отредактировать, изменить стиль, а с дочерней не знаю как это реализовать. Использую DevExpress, подскажите пожалуйста, как можно сделать, хочется изменить Caption полей и убрать лишние столбцы, как например ключи, заранее спасибо
Автор: vladman
Дата сообщения: 17.10.2009 13:04
tatbesidovska51

Цитата:
спользую DevExpress, подскажите пожалуйста, как можно сделать, хочется изменить Caption полей и убрать лишние столбцы, как например ключи

Если речь идет о дизайнтайм, то для доступа к свойствам дитейл грида выполните правый клик на cxGrid, выберите пунк меню *Editor...* в открывшемся диалоге выберите нужный TableView в закладке *Structure* и справа в закладке *Columns* у вас появятся все столбцы выбранного TableView
Автор: tatbesidovska51
Дата сообщения: 17.10.2009 13:27
Дело в том, что таблица дочерняя отображается в одном гриде с главной, при нажатии на "+" главной раскрывается дочерняя
Автор: vladman
Дата сообщения: 17.10.2009 14:59
TORSER7

Цитата:
требуется ввести целое (именно целое) число с ограничением
разрядности MaxLength. И чтобы вставку из буфера обмена запретить.

Примеры для TcxTextEdit и TcxMaskEdit.
[more=далее]
Код: unit Unit76;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, dxSkinsCore, dxSkinMcSkin, dxSkinsDefaultPainters, cxControls, cxContainer, cxEdit, cxTextEdit,
cxMaskEdit;

type
TcxMaskEdit = class(cxMaskEdit.TcxMaskEdit)
public
procedure PasteFromClipboard; override;
end;

type
TForm76 = class(TForm)
cxTextEdit1: TcxTextEdit;
cxMaskEdit1: TcxMaskEdit;
procedure cxMaskEdit1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
procedure cxTextEdit1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
procedure cxTextEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure cxTextEdit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form76: TForm76;
vMaxTextLength: Integer;

implementation

{$R *.dfm}

// В cxMaskEdit1 можно и не переопределять это событие, чтобы дать возможность
// пользователю использовать контекстное меню для копирования и вырезания содержимого этого контола
// команда *Paste* из этого меню все равно не выполнится
procedure TForm76.cxMaskEdit1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
begin
Handled := True;
end;

procedure TForm76.cxTextEdit1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
begin
Handled := True;
end;

procedure TForm76.cxTextEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Length(TcxTextEdit(Sender).EditingText) >= vMaxTextLength then
TcxTextEdit(Sender).ActiveProperties.ValidChars := [#8]
else TcxTextEdit(Sender).ActiveProperties.ValidChars := ['0'..'9'] + [#8];
end;

procedure TForm76.cxTextEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in TcxTextEdit(Sender).ActiveProperties.ValidChars) then
Key := #0;
end;

procedure TForm76.FormCreate(Sender: TObject);
begin
vMaxTextLength := 5;
cxMaskEdit1.Properties.MaskKind := emkRegExprEx;
cxMaskEdit1.Properties.EditMask := Format('\d{0,%d}', [vMaxTextLength]);
end;

{ TcxMaskEdit }
procedure TcxMaskEdit.PasteFromClipboard;
begin
//
end;

end.
Автор: rdenk1
Дата сообщения: 18.10.2009 08:30
Как в cxgrid создать (программно) сложный заголовок? Т. е. нужно, чтобы заголовок всей таблицы состоял из двух строк, и некоторые верхние ячейки были объединены.
Автор: X11
Дата сообщения: 18.10.2009 08:48
Для начала нужно заменить TcxGridTableView на TcxGrid1BandedTableView
Автор: rdenk1
Дата сообщения: 18.10.2009 08:59
Как это сделать?
Автор: X11
Дата сообщения: 18.10.2009 09:02
Ну нажми кнопку Customize в cxGrid (справа внизу), там удали ненужный грид, и создай нужный Там всё просто, думаю разберёшься.
Автор: rdenk1
Дата сообщения: 18.10.2009 09:12
Заменил, теперь вообще вся таблица пустая

Добавлено:
Хотя я bands и columns заполнил

Добавлено:
Так, ну это я понял, там надо было в структуре этот вид выбрать.
Автор: X11
Дата сообщения: 18.10.2009 10:02
Я точно не помню как, но там нужно выполнить привязку бэндов и колонок. У колонки указать, к какому бэнду она относиться
Автор: rdenk1
Дата сообщения: 18.10.2009 10:12
Ну вот я построил нужный мне заголовок, но вверху bands не удается убрать. И печатать в таблице не получается.

Добавлено:
Изменение cxgrid1bandedTableView1.DataController.RecordCount никак не меняет таблицу, обратиться к ячейкам тоже не удается

Добавлено:
Извиняюсь, с добавлением записей это я попутал. Записи добавляются, но не той формы (они копируют форму заголовка, а мне надо просто одинарные строки).
Автор: vladman
Дата сообщения: 18.10.2009 11:21
rdenk1

Цитата:
Как в cxgrid создать (программно) сложный заголовок?

Исходя из ваших последующих вопросов я бы рекомендовал сначала почитать раздел справки по ExpressQuantumGrid6 *Banded Table View Tutorial*, начало здесь:
ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_cd_Banded_View_Tutorial_Overview.htm
Также разделы *Fundamentals* и *Base Concepts* будут полезны.
Что касается программного управления бандами и колонками, посмотрите раздел справки по ExpressQuantumGrid6 *Task Based Help -> Banded Table View*, ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_tbh_Banded_Table_View.htm
Автор: rdenk1
Дата сообщения: 18.10.2009 11:25
А как объединить программно несколько ячеек? У заголовок 1-й колонки занимает 2 строки таблицы (являясь при этом одной ячейкой), а второй заголовок состоит при этом из 2-х ячеек (на эти же 2 строки) и при добавлении записи во второй колонке добавляетсчя за раз сразу 2 строки.
Автор: X11
Дата сообщения: 18.10.2009 11:38
rdenk1, послушай, изучи хотябы минимально cxGrid, почитай этот форум, погугли, справку посмотри, примеры и справка на официальном сайте в свободном доступе. А то ты тут такие вопросы задаешь элементарные.... тебя просто или будут игнорировать или забанят.
Автор: rdenk1
Дата сообщения: 18.10.2009 11:43
vladman

Цитата:
Исходя из ваших последующих вопросов я бы рекомендовал сначала почитать раздел справки по ExpressQuantumGrid6 *Banded Table View Tutorial*, начало здесь:
ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_cd_Banded_View_Tutorial_Overview.htm
Также разделы *Fundamentals* и *Base Concepts* будут полезны.
Что касается программного управления бандами и колонками, посмотрите раздел справки по ExpressQuantumGrid6 *Task Based Help -> Banded Table View*, ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_tbh_Banded_Table_View.htm

Не понял. Страницы вида: ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_cd_Banded_View_Tutorial_Overview.htm
их где открывать вообще? В браузере? Таких страниц нет. А можете прямую ссылку на offline-документацию дать? У меня одни демки только, но там нет такого.
Автор: vladman
Дата сообщения: 18.10.2009 11:54
rdenk1

Цитата:
Не понял. Страницы вида...

Это линк на страницу в Microsoft Document Explorer. В версиях Delphi c D2005 используется как справочная система.
Цитата:
А можете прямую ссылку на offline-документацию дать?

Вот с этого как раз и нужно было начинать.
http://www.devexpress.com/Downloads/VCL/Help.xml

Добавлено:
Поправил шапку. Добавил ссылку на *Documentation for VCL Products*
Автор: rdenk1
Дата сообщения: 18.10.2009 13:02
Прочел все, что касается Banded Table View, но именно такого не нашел. Там Там во всех наиболее похожих на мой примерах в качестве первой строки сложного заголовка применяется сами band'ы, а собственно заголовок уже состоит из одной строки, озаглавливающей сразу по несколько колонок в каждом band'е. Мне же пока пришлось band'ы сделать пустыми. Заголовок у меня такой (это без band'ов):
________________________________
| | |
| | |
| |_________________|
| | | |
| | | |
| | | |
|___________|_________________|

И вот, когда я добавляю запись в таблицу, добавляются сразу 2 строки фактически.

Добавлено:
Хорошо, тогда такой вопрос: как сделать 1-й столбец постоянно присутствующим при перемещении гор. скроллбара? Дело в том, что там идет подпись, что каждая строка означает. При этом сама таблица большая, и не хотелось бы, чтобы пользователь был вынужден каждый раз возвращаться влево.
Автор: X11
Дата сообщения: 18.10.2009 17:03

Цитата:
Хорошо, тогда такой вопрос: как сделать 1-й столбец постоянно присутствующим при перемещении гор. скроллбара?

это называется fixed, смотри в настройках бэнда. И опять очень советую посмотреть примеры, почитать справку и погуглить.
Автор: vladman
Дата сообщения: 19.10.2009 02:09
rdenk1
Послушайте, давайте пример в екселе как и что вы хотите визуализировать - сделаю вам такое же в DevExp, иначе, на мой взгляд, это уже походит на разговор глухого со слепым.
Автор: f3ka
Дата сообщения: 19.10.2009 07:40
vladman
X11
думаю что данный экземпляр в скором времени будет просить за него софт писать... так что может не стоит как говориться "пускать свинью под стол, а то она на стол полезет"?
Автор: Walerik75
Дата сообщения: 19.10.2009 15:02
Доброго времени суток!

TcxGrid Есть колонка с Properties = PopupEdit.
Как можно запретить активацию Popup по условию содержимого ячейки колонки? В частном случае: ячейка пустая - запретить выпадение редактора, ячека содержит значение - разрешить вызов редактора.
Автор: volser
Дата сообщения: 19.10.2009 17:00
Walerik75
cxGrid1DBTableView1.OnEditing
Автор: vladman
Дата сообщения: 19.10.2009 18:50
Walerik75

Цитата:
Как можно запретить активацию Popup по условию содержимого ячейки колонки?

Можно, конечно, создать наследник от TcxCustomDropDownEdit и переопределить его метод CanDropDown, но в вашем случае того же результата можно добиться немного проще, обработав событие onGetProperties вашей колонки. По умолчанию для этой колонки никаких Properties и RepositoryItems устанавливать не нужно. Также предварительно необходимо создать PopupEditItem в cxEditRepository. Сам обработчик может выглядеть так:

Код: procedure <YourForm>.<YourcxGridTableViewYourColumnWithPopupEditor>GetProperties(Sender: TcxCustomGridTableItem; ARecord:
TcxCustomGridRecord; var AProperties: TcxCustomEditProperties);
begin
if not VarIsNull(Sender.GridView.DataController.Values[ARecord.Index, Sender.Index]) then
AProperties := <YourcxEditRepositoryYourPopupItem>.Properties;
end;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

Предыдущая тема: Delphi: tcp клиент в потоке


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