Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.04;
Скачать: CL | DM;

Вниз

Рисование в TEdit   Найти похожие ветки 

 
webpauk ©   (2009-07-31 12:06) [0]

как часть текста Tedit нарисовать другим цветом?


 
Anatoly Podgoretsky ©   (2009-07-31 12:10) [1]

> webpauk  (31.07.2009 12:06:00)  [0]

SetStart/SelLength


 
webpauk ©   (2009-07-31 12:13) [2]

где рисовать? событие какое?


 
clickmaker ©   (2009-07-31 12:27) [3]

TRichEdit SelAttributes


 
webpauk ©   (2009-07-31 12:43) [4]


> clickmaker ©   (31.07.09 12:27) [3]
>
Tedit!!!


 
clickmaker ©   (2009-07-31 12:50) [5]

> [4] webpauk ©   (31.07.09 12:43)

он не умеет
там можно только цвет всего текста или фона изменить


 
Palladin ©   (2009-07-31 12:50) [6]


> [4] webpauk ©   (31.07.09 12:43)

Кто тебе вообще сказал что это возможно?


 
Anatoly Podgoretsky ©   (2009-07-31 13:13) [7]

> clickmaker  (31.07.2009 12:50:05)  [5]

Или то что я указал, позволяет и часть текста покрасить.


 
Anatoly Podgoretsky ©   (2009-07-31 13:13) [8]

> webpauk  (31.07.2009 12:13:02)  [2]

Это не событие, а свойства


 
clickmaker ©   (2009-07-31 13:17) [9]

> Или то что я указал, позволяет и часть текста покрасить

у вас, в Эстонии, TEdit поддерживает разноцветность?


 
Anatoly Podgoretsky ©   (2009-07-31 13:20) [10]

А ты проверь и удивись, я два цвета гарантирую. Правда не гарантирую без фона, но цвет будет разным.


 
clickmaker ©   (2009-07-31 13:22) [11]

> [10] Anatoly Podgoretsky ©   (31.07.09 13:20)

да ладно. Вряд ли автор задал вопрос про выделение.
webpauk тут давно тусит, я не думаю, что он настолько уж... ламер )


 
Anatoly Podgoretsky ©   (2009-07-31 13:27) [12]

Я могу и предложить и другой путь - это перекрыть метод Paint, но я думаю он умрет после этого.


 
clickmaker ©   (2009-07-31 13:30) [13]

> [12] Anatoly Podgoretsky ©   (31.07.09 13:27)

ну так это в любом компоненте можно предложить... получится просто, что надо будет практически повторить большинство пути его авторов )
и зачем, когда есть richedit?


 
Palladin ©   (2009-07-31 13:33) [14]


> [11] clickmaker ©   (31.07.09 13:22)

зря...


 
webpauk ©   (2009-07-31 13:37) [15]

unit EditKVL;

interface

uses
 SysUtils, Classes, Controls, StdCtrls, Messages, Forms, Graphics, Windows;

const
 cSpecial = "[%s%]";
type
 TEditKVL = class(TEdit)
 private
   procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
   procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
   procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Objects", [TEditKVL]);
end;

procedure TEditKVL.WMKeyDown(var Message: TWMKeyDown);
begin
 if Message.CharCode=VK_RIGHT then
 begin
   if copy(Text, SelStart+1, Length(cSpecial))=cSpecial then SelStart:=SelStart+Length(cSpecial)-1;
 end;

 if Message.CharCode=VK_LEFT then
 begin
   if copy(Text, SelStart-Length(cSpecial)+1, Length(cSpecial))=cSpecial then SelStart:=SelStart-Length(cSpecial)+1;
 end;

 inherited;
end;

procedure TEditKVL.WMLButtonDown(var Message: TWMLButtonDown);
var
 fS: String;
 fI: Integer;  
begin
 inherited;

 for fI := 1 to Length(cSpecial)-1 do
 begin
   fS:=copy(Text, SelStart-(fI-1), Length(cSpecial));
   if fS=cSpecial then SelStart:=SelStart+Length(fS)-fI;
 end;
end;

procedure TEditKVL.WMPaint(var Message: TWMPaint);
type
 TTextRec = record
   Text: String;
   IsSpecial: Boolean;
 end;
const
 cArr: array[Boolean] of TColor = (clBlack, clRed);
var
 Edit1_DC: HDC;
 fFont: tagLOGFONT;
 NewFont, OldFont: HFONT;
 fLen, fI: Integer;
 fArr: array of TTextRec;
 fS: String;
 TM: TSize;
 fRect: TRect;
 pRect: Pointer;
begin
 inherited;

 fS:=Text;
 while Pos(cSpecial, fS)<>0 do
 begin
   fLen:=Length(fArr);
   SetLength(fArr, fLen+1);
   fArr[fLen].Text:=Copy(fS, 1, Pos(cSpecial, fS)-1);

   fLen:=Length(fArr);
   SetLength(fArr, fLen+1);
   fArr[fLen].Text:=cSpecial;
   fArr[fLen].IsSpecial:=True;
   Delete(fS, 1, Pos(cSpecial, fS)+3);
 end;
 if fS<>"" then
 begin
   fLen:=Length(fArr);
   SetLength(fArr, fLen+1);
   fArr[fLen].Text:=fS;
 end;
 fS:="";

 Edit1_DC:=GetDC(Handle);

 GETOBJECT(Font.Handle, sizeof(fFont), @fFont);
 NewFont:=CreateFontIndiRect(fFont);
 OldFont:=SelectObject(Edit1_DC, NewFont);

 fRect:=Rect(0, 0, Width, Height);
 pRect:=@fRect;
 InvalidateRect(Edit1_DC, pRect, True);
 SetBkMode(Edit1_DC, TRANSPARENT);

 for fI := Low(fArr) to High(fArr) do
 begin
   SetTextColor(Edit1_DC, cArr[fArr[fI].IsSpecial]);
   TextOut(Edit1_DC, TM.cx+1, 1, PAnsiChar(fArr[fI].Text), Length(fArr[fI].Text));
   fS:=fS+fArr[fI].Text;
   GetTextExtentPoint32(Edit1_DC, PChar(fS), Length(fS), TM);
 end;

 NewFont:=SelectObject(Edit1_DC, OldFont);
 DeleteObject(NewFont);

 ReleaseDC(Handle, Edit1_DC);
end;

end.

тока еще глючит...


 
webpauk ©   (2009-07-31 13:39) [16]


> clickmaker ©   (31.07.09 13:17) [9]
>


такой большой дядя, а не знаешь, что можно всё, что не запрещено


 
Anatoly Podgoretsky ©   (2009-07-31 13:50) [17]

> clickmaker  (31.07.2009 13:30:13)  [13]

Я против richedit ничего не имею, это автор против.
Вот поэтому я и оставил Paint на закуску, вдруг это очень важно и автор готов затратить определеные усилия на реализацию.


 
Игорь Шевченко ©   (2009-08-01 00:53) [18]


> тока еще глючит...


И будет глючить.

Есть три пути - использовать TRichEdit и обрабатывать у Edit сообщение WM_PAINT.


 
palva ©   (2009-08-01 11:17) [19]


> Есть три пути

Вспомнился армейский анекдот: "Эй вы, трое! Оба ко мне."



Страницы: 1 вся ветка

Текущий архив: 2009.10.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
15-1249245002
Юрий
2009-08-03 00:30
2009.10.04
С днем рождения ! 3 августа 2009 понедельник


2-1249386539
xyz
2009-08-04 15:48
2009.10.04
прочитать рисунок из БД


11-1204725355
andreil
2008-03-05 16:55
2009.10.04
Организовать правильную работу с потоками...


2-1244576320
новичок13
2009-06-09 23:38
2009.10.04
прозрачна форма но не прозрачная картинка


15-1249295142
McSimm
2009-08-03 14:25
2009.10.04
Извините, ветка испорчена в результате сбоя