Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизTEdit и AutoSelect Найти похожие ветки
← →
TechnoDreamer © (2005-06-29 03:13) [0]Такая проблема, на эдите стоит Autoselect, но работает он только если табом переключятся, а если кликом мыки то не пашет. Не знаю должен ли вообще.
Попробовал сделать на OnEnter следующее:
Edit1.SelectAll;
не работает всё равно, поставил после это ShowMessage, видно что срабатывает, текст выделяет, но сразу пропадает (когда я ОК нажимаю). Других событий на эдите нет.
При чем на он клик это работает, только мне нужно что бы оно срабатывало, только один раз после получения фокуса.
В чем прикол не пойму, это глюк,или я что то провтыкал?
← →
VMcL © (2005-06-29 08:26) [1]>>TechnoDreamer © (29.06.05 03:13)
AFAIK, это не глюк, так задумано. Если юзер кликает мышкой в Edit"е, то вполне вероятно, он хочет установить курсор сразу в определённое место.
← →
gydvin (2005-06-29 09:11) [2]
procedure TForm1.Edit1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
edit1.SelectAll;
end;
← →
TechnoDreamer © (2005-06-29 10:40) [3]gydvin, ставить на маусап тут тоже самое что и в онклик в данном случае.
VMcL, так не задумано. Стандартно интерфейс должен работать так, юзер туда кликает, выделяется весь текст, и он может его заменить, если он хочет поместить внутрь курсор, то он кликает второй раз, выделение пропадает и курсор становится в место клика. Для этого и есть свойство AutoSelect, и это у меня прекрасно работает в ComboBox, а тут нет. Да и вопрос был в другом. Выделение происходит, в событии OnEnter, но по завершении его оно пропадает. Почему не пойму. Мне нужно чтобы выделяло весь текст при получении TEdit фокуса, а не на каждое нажатие мышки.
← →
-=XP=- © (2005-06-29 10:46) [4]Стандартно интерфейс должен работать так
Будьте добры, приведите ссылку на описание стандарта. Или, хотя бы, его (стандарта) наименование. ;)
но по завершении его оно пропадает
Я подозреваю, это делает Ваша программа.
← →
TechnoDreamer © (2005-06-29 11:34) [5]>Будьте добры, приведите ссылку на описание стандарта. Или, хотя >бы, его (стандарта) наименование. ;)
Ну вот, начинаются совершенно бесмысленные споры, совершенно не касающиеся вопроса.
>>но по завершении его оно пропадает
>Я подозреваю, это делает Ваша программа.
Пример1.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Edit1: TEdit;
procedure Edit1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Edit1Click(Sender: TObject);
begin
Edit1.SelectAll;
end;
end.
Пример2
//Всё то же, вместо OnClick -> OnEnter
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Edit1.SelectAll;
end;
В первом варианте выделяет, во втором нет. В обоих вариантах на первом клике события вызываются. По чему не выделяет во втором, вот в чем вопрос.
Кстати, обратите внимание как ведет себя комбобокс, просто бросьте на форму два компонента, комбобокс и едит, и попереключайтесь между ними. Мне надо чтобы вело себя так как в комбобоксе, ответы, типа где написано что так должно работать, не принимаются, есть элементарные принципы юзабилити, а такой вариант считается намного удобнее (что бесспорно) когда чаще приходится заменять текст, а не редактировать (мой случай).
← →
Alexander Panov © (2005-06-29 11:56) [6]
procedure TForm1.Edit1Click(Sender: TObject);
begin
if TEdit(Sender).Tag=0 then
begin
TEdit(Sender).Tag := 1;
TEdit(Sender).SelectAll;
end;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
TEdit(Sender).Tag := 0;
end;
← →
TechnoDreamer © (2005-06-29 12:08) [7]2 Alexander Panov
Спасибо, просто и красиво. Иногда упрешся во что, то и не видешь простых решений. Хотя всё таки интересно, почему на OnEnter не работает.
← →
Плохиш © (2005-06-29 12:22) [8]
> TechnoDreamer © (29.06.05 12:08) [7]
После OnEnter, происходят события обработки нажатия кнопки мыши и работает алгоритм, описанный в [1].
PS. Ненавижу программы, в которых надо минимум 2 раза кликать на каком-нибуть поле редактированния, только потому, что их всякие TechnoDreamer-ы писали, да и не задерживаются они обычно на долго.
← →
TechnoDreamer © (2005-06-29 15:06) [9]>После OnEnter, происходят события обработки нажатия кнопки мыши и >работает алгоритм, описанный в [1].
Хм, вполне возможно. Хотя это не правильно на мой взгляд. Сразу ведь происходит клик, а потом как следствие приебретиние фокуса, а не наоборот.
>PS. Ненавижу программы, в которых надо минимум 2 раза кликать на >каком-нибуть поле редактированния, только потому, что их всякие >TechnoDreamer-ы писали, да и не задерживаются они обычно на долго.
Вот любят тут переходить на личности.
1. Во первых вы не знаете о чем пишете. Я уже писал выше, что обычно в этом поле вводят, новые данные, хотя изредка бывает потребность просто изменить уже введенные (достаточно редко, может 95 из 100, хотя точную статистику никто конечно не считал). Так что в большинстве случаев нужен именно один клик, а ваш стандартный вариант потребует либо двойной клик (что вообще не интуитивно понятно), либо вообще удаление символов с клавиатуры (поверте, мои офисные работники в основном тыкают Backspace n-ое количество раз) что еще дольше.
2. Во вторых, не переживайте, мою программу вы никогда не увидите, потому, что уж очень она специализирована.
3. Ну и в третих, программа пишется под заказ, и на эту деталь, мне указал именно заказчик, я посмотрел, действительно так намного удобнее.
(Между прочим, в том же Ворде когда вызываешь окно поиска текста, предидущий текст выделен, и это удобно. Но мой эдит расположен в на основной форме, а не в отдельном окне, поэтому выделение нужно на фокус, а не показ формы).
P.S. И советую быть повежливее, а то странно что ВСЯКИЕ плохиши под сороковник еще вежливо говорить не научились.
← →
Плохиш © (2005-06-29 15:13) [10]
> Хотя это не правильно на мой взгляд. Сразу ведь происходит
> клик, а потом как следствие приебретиние фокуса, а не наоборот.
Все сообщения посылаются активному компоненту, поэтому сначала надо передать ему фокус, а уж потом посылать сообщения.
← →
Игорь Шевченко © (2005-06-29 18:25) [11]Собстна, еще решение:
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TMyEdit = class(TEdit)
procedure Click; override;
end;
TEdit = class(TMyEdit);
TfMain = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
end;
var
fMain: TfMain;
implementation
{$R *.DFM}
{ TMyEdit }
procedure TMyEdit.Click;
begin
inherited;
SelectAll;
end;
end.
P.S. Спасибо Ученику за предложенный способ замены поведения стандартных классов.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.047 c