Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1198141284
guav
2007-12-20 12:01
2008.10.26
Доступная память


15-1220002367
начинающий
2008-08-29 13:32
2008.10.26
Windows Vista


2-1221743924
Дмитрий87
2008-09-18 17:18
2008.10.26
Оптимизация


2-1221659101
Terasbetoni
2008-09-17 17:45
2008.10.26
Как клонировать экземпляр компонента


2-1221812490
Alex86
2008-09-19 12:21
2008.10.26
Вложенный запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский