![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день! Столкнулся с такой проблемой, на первый взгляд тривиальной. Есть комбобокс, в нем хранится (и предлагается на выбор) список последних посещенных директорий. Перед переходом в директорию осуществляется проверка ее существования. Если директории уже не существует - переход в некий каталог по умолчанию. Вот этот каталог в список комбобокса заносить не надо, но если мы в него перешли - его надо отображать в заголовке комбобокса. Что делаю:
Код:
ComboBox1.Text:=wd; Как отобразить текст, которого нет в списке комбобокса? |
|
#2
|
||||
|
||||
|
Как вариант добавить item и выбрать его. При фокусировке удалять.
|
|
#3
|
||||
|
||||
|
мало информации...
стиль у ComboBox == csDropDownList? тогда он отображает текст только из выбранного Items или пусто если ItemIndex == -1. если стиль csDropDown, то пользователь вообще не сможет вручную ввести имя папки - он будет постоянно сбрасываться на "по умолчанию". это если делать обработку в событии OnChange. если же сделать что обработка начнется при нажатии на кнопку, то все будет отлично работать и ComboBox1.Text:=''; и пользователь сможет руками набрать имя. |
|
#4
|
|||
|
|||
|
~TB~ Ваш вариант пробовал - не помогает, да и не эстетично как-то
![]() NumLock стиль стоит csDropDown список может быть раскрыт, можно писать в строке ввода - исходя из инета (проверено текст вручную вводится) У меня проблема как раз не с тем, чтоб вручную ввести, проблема чтоб програмно заставить показать комбобокс текст отличный от того, что есть в его итемсах Последний раз редактировалось Oreon, 26.07.2012 в 18:28. |
|
#5
|
||||
|
||||
|
тогда вот это точно работает:
Код:
ComboBox1.Text:='any text'; |
|
#6
|
||||
|
||||
|
Цитата:
Этот стиль как раз позволяет использовать Edit, встроенный в ComboBox, по-прямому назначению. |
|
#7
|
|||
|
|||
|
не эстетичный способ тоже работает
|
|
#8
|
||||
|
||||
|
Цитата:
вообщем без минимального пректа ТС тут сложно подсказать решение. |
|
#9
|
|||
|
|||
|
Цитата:
Цитата:
|
|
#10
|
||||
|
||||
|
без проблем. выбирай что хочешь и жми на кнопку:
http://zalil.ru/33615169 |
|
#11
|
|||
|
|||
|
Это не совсем то - вводится лишняя кнопка, можно без кнопки поставить на onexit, но тогда нужно щелкать на другой компонент, что тоже не то. Задача стоит именно при выборе пользователем битого пути перебрасывать его на путь по умолчанию и показывать это в комбобоксе не занося его в список (ибо мусор) дабы не вводить пользователя в заблуждение.
PS: по перечисленным вами причинам работаю не через OnChange, а через OnSelect |
|
#12
|
||||
|
||||
|
а как быть когда пользователь начинает руками набирать путь в поле?
|
|
#13
|
|||
|
|||
|
ввод заканчивается клавишей ентер, далее проверяем путь если он есть - добавляем в список и переходим, если путь битый - переходим на путь по умолчанию и нада его показать в комбобоксе, а он не показывается... ну в общем мы перешли на то с чего начали
![]() |
|
#14
|
||||
|
||||
|
Код:
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Memo1: TMemo;
procedure ComboBox1Select(Sender: TObject);
procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
procedure SetDef(var Msg: TMessage); message WM_USER+$1001;
public
{ Public declarations }
end;
...
procedure TForm1.SetDef(var Msg: TMessage);
begin
ComboBox1.Text:='d:\Documents';
Memo1.Lines.Add(ComboBox1.Text);
end;
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
if not DirectoryExists(ComboBox1.Text) then
PostMessage(Handle, WM_USER+$1001, 0, 0)
else
Memo1.Lines.Add(ComboBox1.Text);
end;
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then ComboBox1Select(ComboBox1);
end;оно? http://zalil.ru/33615616 |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Oreon (28.07.2012)
| ||
|
#15
|
|||
|
|||
|
Обалдеть, работает!
Большое спасибо, я правда представлял себе более, так сказать, простое решение, но видимо без вот таких хитростей не получится. Еще раз спасибо. |