Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.10.04;
Скачать: [xml.tar.bz2];

Вниз

Рисование в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.006 c
15-1249126212
Kerk
2009-08-01 15:30
2009.10.04
Как пережить финансовый кризис?


3-1227778320
Вадим
2008-11-27 12:32
2009.10.04
SELECT к нескольким БД


1-1218117173
RAndrey
2008-08-07 17:52
2009.10.04
Access Violation в потоке


2-1248977190
xyz
2009-07-30 22:06
2009.10.04
insert или update


15-1249167230
DillerXX
2009-08-02 02:53
2009.10.04
нужна электронная мартышка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский