воскресенье, 10 августа 2014 г.

][аки. Как в контроле визуализировать число типа 10 в минус 5 степени?

В принципе запись с экспонентой решит проблему, т.е. запись вида 10e-5 будет корректно отрабатываться при конвертации типов. Для текущей же задумки с отображением степени вверху требуется перерисовывать на Canvas-е контрола свой текст с нужной визуализацией в требуемых местах. Контрол может быть любой, не только окно ввода, но и например ячейки таблицы. При этом, в перерисовку приложения и в метод отслеживания изменений содержимого контрола добавим вызов процедуры 'drawedit(edit1)' (см. код под катом). Если запись в ваш контрол идет вручную без мантиссы 'e', то обычное отображение - при наборе 'e' идет имитация каретки. Преимущество данного подхода в том, что сохраняется возможность беспроблемной конвертации типов из текста в визуальном контроле при независимом его отображении.

Код примитивен:
// Отрисовка на TEdit-е
// Developer: Badlo Sergey
// H-page:
http://raxp.radioliga.com
procedure drawedit(control: Tedit);
var h: TControlCanvas;  
b: tbitmap;  
mantis, baza: string;  
k: integer;
begin h:= nil;
 try
 h:= TControlCanvas.Create;
 b:= tbitmap.Create;
 h.control:= control; 
 k:= pos('e', control.Text);

 if k>0 then begin 
  baza:= copy(control.Text, 1, k-1); 
  mantis:= copy(control.Text, k+1, length(control.Text)-k); 
  if length(baza)+1=length(control.text) then mantis:= '_'
 end else baza:= control.text;

 if length(control.text)=0 then baza:= '_';  
 with b do begin
   Canvas.Brush.Color:= clwhite; 
   Canvas.Font.Color:= clblack; 
   Width := control.Width; 
   Height:= control.Height; 
   canvas.Font.Size:= 6; 
   Canvas.TextOut(Canvas.TextWidth(baza)+2, 0, mantis); 
   Canvas.Font.Size:= 7; 
   Canvas.TextOut(1, 6, baza);
 end;
 h.Draw(0,0, b);
 finally
  freeandnil(h);
  freeandnil(b)
 end;

 hideCaret(control.Handle)
end;
Результат:



Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.