Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.038 c
5-1090308239
Death_R
2004-07-20 11:23
2005.07.18
Создание компонента при изменении свойств другого компонента


1-1120394853
Unknow
2005-07-03 16:47
2005.07.18
Как вписать данные в ListView


14-1118924278
DeMoN-777
2005-06-16 16:17
2005.07.18
Странные письма


4-1116607874
urri
2005-05-20 20:51
2005.07.18
повторный запуск


8-1111400466
Штотоносец
2005-03-21 13:21
2005.07.18
Алгоритм пикселизации.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский