Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.26;
Скачать: CL | DM;

Вниз

Как изменить текст комбобокса после выбора из выпадающего списка   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
2-1221686355
DBGrid
2008-09-18 01:19
2008.10.26
Убрать ScrollBar


2-1221590235
Lamer666
2008-09-16 22:37
2008.10.26
AdoConnection и MySQL на хостинге?


15-1220445110
Vlad Oshin
2008-09-03 16:31
2008.10.26
Все таки профессия накладывает .. :)


2-1221992928
voprsest
2008-09-21 14:28
2008.10.26
поиск дочерних окон


15-1220412091
Slider007
2008-09-03 07:21
2008.10.26
С днем рождения ! 3 сентября 2008 среда