Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#1: 2015-09-29 09:03:21 ЛС | профиль | цитата
Когда на форме много полей ввода (Edit), трудновато увидеть где курсор. Это факт.
Попробовал применить метод подсветки активной Edit.
Заказчик остался очень доволен.
Вот что получилось после перевода на HiAsm :
telbook.rar
Запускаем и жмём Tab.
------------ Дoбавленo в 09.03:
А может добавить в Edit два свойства : Включить подсветку и Выбор цвета подсветки ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
4
файлы: 1telbook.rar [2KB] [446]
Голосовали:sla8a, Shonyi, MAV, Konst
Разработчик
Ответов: 26151
Рейтинг: 2127
#2: 2015-09-29 11:05:04 ЛС | профиль | цитата
Tad писал(а):
А может добавить в Edit

А почему только в Edit Memo, к примеру, это же мультистрочный Edit
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#3: 2015-09-29 11:35:46 ЛС | профиль | цитата
Тоже верно. Я за.
Иногда на форме штук 20 Edit-ов. Высмотреть моргающую черточку - совсем не просто.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#4: 2015-09-29 11:49:16 ЛС | профиль | цитата
Tad писал(а):
Я за.

Тогда попытайся реализовать, а мы посмотрим, что получится
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#5: 2015-09-30 11:07:01 ЛС | профиль | цитата
Сейчас загружен по самое небалуйся.
Так что идею дарю желающим поработать !
Там есть ( в Edit) ещё одна проблема :
DataType = Text, но нужно ввести только буквы, или только цифры, или смешанный текст.
Со смешанным текстом проблем нет, а вот отфильтровать только буквы или только цифры - без IC никак.
------------ Дoбавленo в 11.07:
А как лучше ?
howbest.rar
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1howbest.rar [32.3KB] [405]
Разработчик
Ответов: 26151
Рейтинг: 2127
#6: 2015-09-30 12:18:32 ЛС | профиль | цитата
Tad писал(а):
А как лучше ?

Тоже ничего. Тогда надо два варианта предусмотреть -- бордюр или фон
карма: 22

0
Ответов: 8926
Рейтинг: 823
#7: 2015-09-30 12:36:50 ЛС | профиль | цитата
Tad, так лучше, даже если не красным, а просто жирным выделить
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#8: 2015-09-30 12:55:54 ЛС | профиль | цитата
Леонид писал(а):
просто жирным выделить
Если на форме применён для надписей жирный шрифт, то жирная рамка того же цвета сливается с общей картиной.
[flood]На Украине у меня был друг дальтоник, которого я использовал как тестера.
Тот бы точно сказал - выделяется активный или нет и в каком случае лучше. [/flood] А рамка вокруг активного компонента по-моему всё ж таки лучше.
Рамкой можно выделить любой визуальный компонент. Можно даже пульсирующей.

Нужно думать над алгоритмом...
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:andrestudio
Ответов: 824
Рейтинг: 138
#9: 2015-10-04 02:52:55 ЛС | профиль | цитата
Tad писал(а):
Так что идею дарю желающим поработать !
Есть небольшие наработки
подсветка активного элемента


Позже выложу идею и наработки...
карма: 1

2
Голосовали:Tad, andrestudio
Разработчик
Ответов: 26151
Рейтинг: 2127
#10: 2015-10-04 03:36:12 ЛС | профиль | цитата
sashaoli писал(а):
Позже выложу идею и наработки...

Ждем посмотреть
карма: 22

0
Ответов: 5227
Рейтинг: 587
#11: 2015-10-04 08:03:17 ЛС | профиль | цитата
делать так менеджером, Tad, +sashaoli, +

карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 824
Рейтинг: 138
#12: 2015-10-04 09:59:27 ЛС | профиль | цитата
Продолжу...

С подсветкой цветом все как бы просто и понятно.
С рамкой немного намучился...
Оказалось все просто как "два пальца обасфальт"
Помещаем за активным контролом любой другой на несколько пикселей больше, закрашиваем нужным цветом и рамка готова.
Для такой цели наилучшим образом подходит PaintBox. А тут (PaintBox) есть поле для дальнейшего творчества.
Я воспользовался предложением nesco про оба варианта.
И решил сразу "пилить" Win.pas, чтобы в визуальных компонентах по умолчанию были такие свойства.
Доработки в Win.pas

#pas
THIWin = class(TDebug)
protected
//после fOnMouseLeave:THI_Event;
BacklightBorder:PControl; //добавлена переменная для PaintBox
public
//после _prop_WinStyle:byte;
//Property BlackLight
_prop_BackLightStyle:byte; //Добавлено свойство "стиль подсветки"
_prop_ColorFill:TColor; //Добавлено свойство "цвет заливки"
_prop_ColorFrameLine:TColor; //Добавлено свойство "цвет линии рамки"
_prop_FrameLineWidth:Integer; //Добавлено свойство "толщина линии рамки"

//после procedure _work_doHint(var Data:TData; Index:word);
procedure SetBacklight; //Добавлена процедура установки подсветки
procedure ResetBacklight; //Добавлена процедура снятия подсветки
-----------------------------------------------------------------
implementation
//добавлено после destructor THIWin.Destroy; begin ... end;
procedure THIWin.SetBacklight; //Процедура установки подсветки
begin
if (_prop_BackLightStyle = 1) or (_prop_BackLightStyle = 3) then Control.Color:= _prop_ColorFill;
if (_prop_BackLightStyle = 2) or (_prop_BackLightStyle = 3) then
begin
BacklightBorder:= NewPaintBox(Control.Parent);
with BacklightBorder{$ifndef F_P}^{$endif} do begin
Left:= Control.Left - _prop_FrameLineWidth;
Top:=Control.Top - _prop_FrameLineWidth;
Width:=Control.Width + (2 * _prop_FrameLineWidth);
Height:=Control.Height + (2 * _prop_FrameLineWidth);
Color:=_prop_ColorFrameLine;
BringToFront; //Важно
end;
Control.BringToFront; //Важно
end;
end;

procedure THIWin.ResetBacklight; //Процедура снятия подсветки
begin
Control.Color:= _prop_Color;
BacklightBorder.Free;
end;
-----------------------------------------------------------------
//проведены изменения в function THIWin._onMessage;
function THIWin._onMessage;
var P:PWindowPos; dt:TData; sz:integer;
begin
case Msg.message of
WM_WINDOWPOSCHANGING: begin
P := Pointer(Msg.lParam);
if (P.flags and SWP_NOSIZE)=0 then begin
sz := Control.Height;
if P.cy<>sz then begin
dtInteger(dt, P.cy - sz);
_ReadData(dt,_data_HeightControls);
if _isInteger(dt) then P.cy := sz + ToInteger(dt);
end;
sz := Control.Width;
if P.cx<>sz then begin
dtInteger(dt, P.cx - sz);
_ReadData(dt,_data_WidthControls);
if _isInteger(dt) then P.cx := sz + ToInteger(dt);
end;
end;
end;
WM_SETFOCUS : begin
if _prop_BackLightStyle <> 0 then SetBacklight; //Вызов процедуры установки подсветки
_hi_OnEvent(_event_onSetFocus);
end;
WM_KILLFOCUS: begin
if _prop_BackLightStyle <> 0 then ResetBacklight; //Вызов процедуры снятия подсветки
_hi_OnEvent(_event_onKillFocus);
end;
WM_MOVE: _hi_OnEvent(_event_onMove);
end;
Result := _hi_OnMessage(OldMes,Msg,Rslt);
end;
Доработки в WinControl.ini

#ini
;добавлено в конце секции [Property]
##Backlight=Подсветка при получении фокуса
BackLightStyle=Стиль подсветки: None - нет подсветки, FillColor - изменить цвет заливки, FrameColor - изменить цвет рамки, BothVariants - оба варианта|4|0|None,FillColor,FrameColor,BothVariants
ColorFill=Цвет заливки|8|clYellow
ColorFrameLine=Цвет рамки|8|clRed
FrameLineWidth=Ширина линии рамки|1|1
##
------------ Дoбавленo в 09.46:
Вот мои WinControl.ini и Win.pas
------------ Дoбавленo в 09.59:
"Подводные камни..."
Компонент ComboBox - в режиме ReadOnly=False получает и сразу теряет фокус (подсветка как-бы не происходит)
Компонент TrackBarRush - при переходе по TAB не получает фокус, хотя при клыке мышкой рамка рисуется.
Компонент UpDown - при переходе по TAB не получает фокус и скорее не обрабатывает SetFocus,KillFocus.
карма: 1

2
Голосовали:Tad, MAV
Ответов: 16884
Рейтинг: 1239
#13: 2015-10-04 12:10:33 ЛС | профиль | цитата
.....
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 824
Рейтинг: 138
#14: 2015-10-04 12:57:38 ЛС | профиль | цитата
Tad писал(а):
У меня вроде работает.
Работает только в режиме ReadOnly=True!
Если ReadOnly=False у меня не работает...
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#15: 2015-10-06 23:33:18 ЛС | профиль | цитата
nesco, ау-у-у ...
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)