Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
ВнизКак изменить текст комбобокса после выбора из выпадающего списка Найти похожие ветки
← →
ANB (2008-09-16 14:19) [0]Чего то совсем туплю.
Имеем : комбобокс с заполненным выпадающим списком.
Надо : после того, как юзер выбрал нужный элемент в списке изменить текст комбобокса.
Зачем : в списке лежат длинные строки, которые я разбираю, обрабатываю, а по окончании в тексте комбобокса хочу отобразить только кусок выбранной строки.
Что получается : вроде нужная строка сначала присваивается, а потом трется обратно длинной строкой из списка.
← →
Поросенок Винни-Пух © (2008-09-16 14:25) [1]похожий пример был в rx. или в EhLib (для dbaware)
То есть юзер при выбое видит одно поле (значение), а в KeyValue записано другое поле (значение)
← →
Ega23 © (2008-09-16 14:44) [2]
> То есть юзер при выбое видит одно поле (значение), а в KeyValue
> записано другое поле (значение)
Не совсем так. Там DisplayValue было
← →
Поросенок Винни-Пух © (2008-09-16 14:46) [3]Если про RX то там у комбо было два параллельных списка.
Один с отображаемыми строками, другой со значениями.
← →
MsGuns © (2008-09-16 14:49) [4]В таких случаях я бы использовал обычный эдит, справа рядом кнопульку и "фантомный" комобокс, который по нажатию на кнопульку рисуется точно по эдиту и кнопульке. Дальше, думаю все ясно. Если имеется процедура обработки ресайзинга, то всю эту троицу впихать в панельку, размеры и позицию которой пересчитывать так же, как и для "старого" комобобокса
← →
ANB (2008-09-16 15:29) [5]
> MsGuns © (16.09.08 14:49) [4]
Матство. А попроще низзя ?
Пока извратился через перезаписывание одного элемента Items. Благо его содержимое не больно ценно. Хотя хотелось бы вернуть все на место.
← →
MsGuns © (2008-09-16 15:58) [6]>ANB (16.09.08 15:29) [5]
>Матство.
Переведи
>А попроще низзя ?
А чего там сложного ? Особенно если эту панель с тройкой не засунуть в репозитрий и брать оттуда готовую ? Да и в библиотеку можно засунуть, обойдясь вообще без дизайна
← →
Игорь Шевченко © (2008-09-16 16:43) [7]
> Имеем : комбобокс с заполненным выпадающим списком.
> Надо : после того, как юзер выбрал нужный элемент в списке
> изменить текст комбобокса.
> Зачем : в списке лежат длинные строки, которые я разбираю,
> обрабатываю, а по окончании в тексте комбобокса хочу отобразить
> только кусок выбранной строки.
Используй OwnerDraw и выводи только часть текста. Реагируй на odComboBoxEdit в State при рисовании.
Примерно так:unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
procedure ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
AText: string;
begin
TComboBox(Control).Canvas.FillRect(Rect);
if Index <> -1 then
begin
AText := TComboBox(Control).Items[Index];
if odComboBoxEdit in State then
AText := Copy(AText, 1, 5);
DrawText(TComboBox(Control).Canvas.Handle, PChar(AText), -1, Rect,
DT_VCENTER);
end;
end;
end.
← →
oldman © (2008-09-16 17:02) [8]
> ANB (16.09.08 14:19)
> Зачем : в списке лежат длинные строки, которые я разбираю,
> обрабатываю, а по окончании в тексте комбобокса хочу отобразить
> только кусок выбранной строки.
Положи в список короткие строки.
А обрабатывай длинные. Например, из постороннего массива.
← →
ANB (2008-09-16 17:22) [9]
> Игорь Шевченко © (16.09.08 16:43) [7]
Да мне и иметь в поле нужно короткий текст. Иначе длинный придется еще раз обрабатывать. Плюс юзер должен иметь возможность руками его менять.
> Положи в список короткие строки.
> А обрабатывай длинные. Например, из постороннего массива.
>
По хорошему юзер должен видеть длинные строки.
> >Матство.
Непереводимая игра слов. :(
← →
Vlad Oshin © (2008-09-16 17:27) [10]положи еще один, на самом деле, поверх, пусть Визибл щелкается туда-сюда
← →
Игорь Шевченко © (2008-09-16 17:27) [11]ANB (16.09.08 17:22) [9]
> Да мне и иметь в поле нужно короткий текст. Иначе длинный
> придется еще раз обрабатывать. Плюс юзер должен иметь возможность
> руками его менять.
Тогда не мучайся, а сделай отдельный edit и отдельный выпадающий список
← →
ANB (2008-09-16 17:30) [12]
> Тогда не мучайся, а сделай отдельный edit и отдельный выпадающий
> список
Лениво и некогда. Использовал пока нулевой элемент Items для мусора. Работает и ладно. Юзеру не мешает. Вылезла по дороге еще одна проблема в комбинации комбобокс + RX форм-стродже. Пустые элементы списка как то криво садяться.
Я думал что такой тупой и не умею работать с комбобоксами, а оно воно как. Следующий раз переделаю на обычный эдит.
← →
{RASkov} © (2008-09-16 17:42) [13]> Как изменить текст комбобокса после выбора из выпадающего списка
А такой вариант не пойдет:unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
const AFTER_COMBOSELECT = WM_USER+100;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
procedure ComboBox1Select(Sender: TObject);
private
procedure ComboUpdate(var Mes: TMessage); message AFTER_COMBOSELECT;
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
PostMessage(Handle, AFTER_COMBOSELECT, Integer(TComboBox(Sender)), 0);
end;
procedure TForm1.ComboUpdate(var Mes: TMessage);
begin
with TComboBox(Mes.WParam) do Text:="NewText";
end;
end.
?
← →
ANB (2008-09-16 18:13) [14]
> {RASkov} © (16.09.08 17:42) [13]
О нечто подобном я думал. Только вот PostMessage не больно надежно.
← →
clickmaker © (2008-09-16 18:47) [15]а OnCloseUp не подойдет?
← →
MsGuns © (2008-09-16 20:15) [16]>ANB (16.09.08 17:30) [12]
>Лениво и некогда.
Пока тут трепешься, уже раз восемь бы сделал ;)
← →
ANB (2008-09-17 13:47) [17]
> а OnCloseUp не подойдет?
Не помогает. Я с него начал. Но тогда еще новый текст не доехал.
Засунул в OnSelect
> Пока тут трепешься, уже раз восемь бы сделал ;)
Да я еще вчера сделал.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c