Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.12.2011, 21:04
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию Стиль окна

Подскажите как на 99% определить, что окно ввода текста однострочное (напр. TEdit). Прверял стили окна - ES_MULTILINE не всегда есть у многострочных окон. З.Ы. Окна не моего приложения.
Код:
function HasMultLine(AHandle: HWND): Boolean;
var
  dwStyle: DWORD;
begin
  dwStyle := GetWindowLong(AHandle, GWL_STYLE);
  Result := (dwStyle and ES_MULTILINE) = ES_MULTILINE;
end;
Ответить с цитированием
  #2  
Старый 11.12.2011, 22:51
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Хмм... По-хорошему, никак. Можно например сделать окно (простой белый прямоугольник), на котором рисовать строки вводимого текста и мигающий курсор. И это тоже будет окном ввода текста в каком-то смысле. Могу ошибаться, но по-моему тот же TMemo сделан подобным образом.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 11.12.2011, 23:05
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Если быть точным, то TMemo и TEdit суть одно и тоже. Просто по какой-то причине, в своё время, фирма Borland решила сделать их как 2 разных контрола. У TMemo как раз выставлен флаг ES_MULTILINE
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 12.12.2011, 21:08
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию

Есть 3 спорные идеи.
1. Проверять высоту контрола. У однострочных она обычно 20-24. Хотя тут многое зависит от размера шрифта и извращенной фантазии разработчика. Поэтому под вопросом.
2. По классу контрола (напр. TEdit). Тут вообще мрак. При использовании нестандартных компонентов или после обфускации кода вообще бред будет.
3. Ну и самая фантастическая. Определять реакцию контрола на <VK_RETURN> (в смысле переводит он каретку на след строку или нет). Тут вообще - "звезда в шоке".
У кого какие еще идеи будут ?
Ответить с цитированием
  #5  
Старый 12.12.2011, 21:51
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Можно попытаться использовать функцию GetDlgItemText и проверить на символы переноса строк.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 13.12.2011, 09:19
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

многострочное окно скорее всего должно иметь возможность прокручивания, т.е. иметь стили WS_VSCROLL и ES_AUTOVSCROLL. может стоит попытаться проверить еще и их? если оно конечно не "FullCustomWindow" какое-нибудь.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 13.12.2011, 20:27
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Можно попытаться использовать функцию GetDlgItemText и проверить на символы переноса строк.
Не совсем корректно, т.к. текста может не быть совсем или он может содержать символы перевода строки (а на самом деле перевода строки нет).
Ответить с цитированием
  #8  
Старый 13.12.2011, 20:30
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию

Спасибо всем, кто не прошел мимо. Буду пробовать все варианты и их комбинации.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:40.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025