![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Punk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 25.3.2002 Где: Абакан Репутация: нет Всего: нет |
Как поставить каретку TMemo в нужную строку |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Посылай нажатие клавишь перемещения...А если не секрет - то зачем тебе это?
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
SelStart - метод чтобы поставить каретку на нужную позицию, но при этом номер строки прийдется вычислить.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
SetCaretPos()
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Нет! Так не пойдет, этот метод не public, его можно вытащить например в потомках, но просто так использовать нельзя.
А можно так:
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Вы не правы. И метод АПИ - SetCaretPos() и собственый метод от мемо: TCustomMemo.SetCaretPos() будут работать без проблем.
Я пробовал -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Сорри, я думал что речь идет о методе а не API функции, а по поводу метода тогда мне не совсем понятно:
1) MyMemo.SetCaretPos - компиллятор не пропускает 2) TCustomMemo(MyMemo).SetCaretPos - компиллятор не пропускает 3) Идет только так: type TFake=class(TCustomMemo); .... TFake(MyMemo).SetCaretPos() Ну так в этом случае я как раз и использую наследник TMemo вызывая в нем Protected методы родительского класса. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Конечно, для SetCaretPos() от TCustomMemo надо использовать наследника, однако, если это применительно только для этой задачи создавать наследника будет излишне, аналогичный метод АПИ работает с любым multiline контролом и даже гипатетически с TEdit
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
А API я посмотрел - она не требует передачу Handle - она что работает с активным компонентом? Тогда ее ценность сильно теряется, так как нельзя перевести курсор при нажатии например кнопки, надо обязательно вначале ставить фокус на контрол. Моя функция будет работать и без фокуса...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
EM_SETSEL возможно, а вот TCustomMemo.SelStart без фокуса никак нет...
Вашему примеру я бы рекомендовал использовать TMemo.Perform - работает быстрее не захломляя текущую очередь сообщений для приложения. -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Ха еще интереснее! А ты попробуй эту функцию - она действительно переводит курсор, но есть 2 но:
1) координаты то не в строках а в пикселях наверное (во всяком случае у меня курсор становится между строк) 2) само memo не идентифицирует эти действия, курсор переносится, но стоит нажать стрелку вправо или влево курсор переносится относительно изначальной позиции а не измененной. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
TCustomMemo.SelStart замечательно работает и без курсора в "background" - ты не увидишь результаты работы визуально, но реально обращение к методам и свойствам подтвердит что все работает.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Возможно, просто моё подозрение было вызвано тем, что выделить участок текста (SetLength >o ) нельзя без передачи фокуса на визуальный компонент.
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Совершенно согласен, использование Perform более родной способ для Дельфи чем посылка сообщений напрямую, а на счет скорости не уверен, по сути ретрансляция идет та же самая, Perform по сути просто VCL надстройка над посылкой сообщений, как я понимаю. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Perform:
Perform then passes the message record to the WindowProc method for processing. SendMessage: The function calls the window procedure for the specified window and does not return until the window procedure has processed the message Сообщение посланное через SendMessage достигает CallBack ф-ии WindProc только после того как обработается в очереди сообщений. Отсюда можно сделать вывод что Perform быстрее, однако PostMessage() на практике тоже широко используется так как тоже не ставит сообщение в очередь. -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Просто идет речь о синхронной или асинхронной посылки сообщений...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Выигрыш в постановке посылки сообщения. По опыту скажу что Perform работает быстрее чем SendMessage. -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Будем учитывать.
PS. У тебя классная аватара, мне нравится. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Punk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 25.3.2002 Где: Абакан Репутация: нет Всего: нет |
Ставлю вопрос ребром
Как запретить переход на первую(!) строку мемо и уж тем более ее изменения Слабо? |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Нет Memo1.Enabled:=False -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Определять позицию каретки и при переходе ее на первую строку, водворять обратно, но вообще дело очень муторное, слишком много событий надо обрабатывать. Я бы вместо первой строки поставил просто edit в котором установил readonly:=true, оба memo и edit сделал бы совсем без рамок и тщательно совместил бы их, и поместил на панель, которая бы и эмулировала рамку вокруг компонентов - при этом пользователю казалось бы что там просто мемо, но на самом деле будет 2 компонента и ему будет затруднительно перейти на первую строку и сделать что-то.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
ИМХО onKeyDown, onMouseDown
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |