Memo1 цвет линий
От: Аноним  
Дата: 05.05.09 07:37
Оценка:
Подскажите пожалуйста как вывести в Memo1 линии разных цветов?
Можно ли это вообще сделать?
Re: Memo1 цвет линий
От: toff Беларусь  
Дата: 05.05.09 09:00
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Подскажите пожалуйста как вывести в Memo1 линии разных цветов?

А>Можно ли это вообще сделать?

Рисует черную линию на компоненте мемо:

procedure TForm1.Button1Click(Sender: TObject);
Var
dc : HDC;//Дескрипторграфического контектса
lpPaint : tagPaintStruct;//Структура для графических объектов
begin
dc:=getDC(memo1.Handle);//бёрем дескритор графического контекста
beginPaint(memo1.Handle, lpPaint);уведомляет систему о перерисовке объекта
lineTo(dc, 100, 100);//Непосредственное рисование.
endPaint(memo1.Handle, lpPaint);уведомляет систему о завершении перерисовки объекта
end;
Re[2]: Memo1 цвет линий
От: Аноним  
Дата: 05.05.09 11:05
Оценка:
Здравствуйте, toff, Вы писали:

T>Здравствуйте, Аноним, Вы писали:



А>>Подскажите пожалуйста как вывести в Memo1 линии разных цветов?

А>>Можно ли это вообще сделать?

T>Рисует черную линию на компоненте мемо:


T>procedure TForm1.Button1Click(Sender: TObject);

T>Var
T> dc : HDC;//Дескрипторграфического контектса
T> lpPaint : tagPaintStruct;//Структура для графических объектов
T>begin
T> dc:=getDC(memo1.Handle);//бёрем дескритор графического контекста
T> beginPaint(memo1.Handle, lpPaint);уведомляет систему о перерисовке объекта
T> lineTo(dc, 100, 100);//Непосредственное рисование.
T> endPaint(memo1.Handle, lpPaint);уведомляет систему о завершении перерисовки объекта
T>end;

Использую C++Builder 6:

Memo1->Lines->Add("Hello Word BLACK");
Memo1->Lines->Add("Hello Word BLUE");
Re[3]: Memo1 цвет линий
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 05.05.09 11:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>Подскажите пожалуйста как вывести в Memo1 линии разных цветов?

А>>>Можно ли это вообще сделать?

T>>Рисует черную линию на компоненте мемо:


А>Использую C++Builder 6:


А>Memo1->Lines->Add("Hello Word BLACK");

А>Memo1->Lines->Add("Hello Word BLUE");

Ну и? У тебя же ясно сказано — первая линия — черная, вторая — синяя
Если серьезно — скачай себе пакет SynEdit и используй его OnSpecialLine событие... Если использование Memo не критично — замени его на ListBox/ListView например и рисуй линии сам в OnCustomDrawItem().
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[3]: Memo1 цвет линий
От: garant  
Дата: 06.05.09 07:31
Оценка:
Аноним 44 пишет:
> Использую C++Builder 6:
>
> Memo1->Lines->Add("Hello Word BLACK");
> Memo1->Lines->Add("Hello Word BLUE");

TMemo не умеет выводить разноцветный текст. Используй TRichEdit.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Memo1 цвет линий
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 06.05.09 07:40
Оценка:
Здравствуйте, garant, Вы писали:

G>TMemo не умеет выводить разноцветный текст. Используй TRichEdit.


Ну, с этим я бы поспорил


// в класс-наследник от TMemo вводим свою функцию отрисовки
// ............
private
   procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
//............
 
// собственно реализация
procedure TMyNewMemo.WMPaint(var Message: TWMPaint);
var
  Buffer: array[0..1024] of Char;
  PS: TPaintStruct;
  DC: HDC;
  i: Integer;
  X, Y, Z: Word;
  OldColor: TColor;
begin
  DC := Message.DC;
  if DC = 0 then
     DC := BeginPaint(Handle, PS);
  try
   X := 1;
   Y := 1;
   SetBkColor(DC, Color);
   SetBkMode(DC, Transparent);
   OldColor := Font.Color;
   for i := 0 to Pred(Lines.Count) do
   begin
     if odd(i) then
       SetTextColor(DC, clRed)
     else
       SetTextColor(DC, OldColor);
     Z := Length(Lines[i]);
     if Z>1024 then 
        Z := 1024;
     StrPCopy(Buffer, Copy(Lines[i],1,Z));
     Buffer[Z] := #0; { реально не нужно }
     TextOut(DC, X, Y, Buffer, Z);
     Inc(Y, abs(Font.Height));
   end;
 finally
   if Message.DC = 0 then
     EndPaint(Handle, PS);
 end;
end;
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[4]: Memo1 цвет линий
От: Аноним  
Дата: 06.05.09 08:07
Оценка:
Здравствуйте, garant, Вы писали:

G>Аноним 44 пишет:

>> Использую C++Builder 6:
>>
>> Memo1->Lines->Add("Hello Word BLACK");
>> Memo1->Lines->Add("Hello Word BLUE");

G>TMemo не умеет выводить разноцветный текст. Используй TRichEdit.


А как с помощью RichEdit сделать 2 разноцветные строчки?
Re[5]: Memo1 цвет линий
От: garant  
Дата: 06.05.09 11:10
Оценка:
DarkMaster пишет:

> Ну, с этим я бы поспорил


Не, ну правильно. Научить можно, но это будет уже не TMemo.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Memo1 цвет линий
От: garant  
Дата: 06.05.09 11:14
Оценка:
Аноним 44 пишет:

> А как с помощью RichEdit сделать 2 разноцветные строчки?


В хелпе же есть...

This example requires a TRichEdit and a TButton. Leave the default text,
usually "RichEdit1", in the lines property. The DefAttributes will apply
to this text.

procedure TForm1.Button1Click(Sender: TObject);
begin
with RichEdit1.SelAttributes do
begin
Color := clRed;
Height := Height + 5;
end;
RichEdit1.Lines.Add('This line of text will be red.');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
RichEdit1.DefAttributes.Color := clBlue;
RichEdit1.DefAttributes.Style := [fsBold, fsItalic];
end;
Posted via RSDN NNTP Server 2.1 beta
Re[6]: Memo1 цвет линий
От: Аноним  
Дата: 06.05.09 11:45
Оценка:
Здравствуйте, garant, Вы писали:

G>Аноним 44 пишет:


>> А как с помощью RichEdit сделать 2 разноцветные строчки?


G>В хелпе же есть...


G>This example requires a TRichEdit and a TButton. Leave the default text,

G>usually "RichEdit1", in the lines property. The DefAttributes will apply
G>to this text.

G>procedure TForm1.Button1Click(Sender: TObject);

G>begin
G> with RichEdit1.SelAttributes do
G> begin
G> Color := clRed;
G> Height := Height + 5;
G> end;
G> RichEdit1.Lines.Add('This line of text will be red.');
G>end;

G>procedure TForm1.Button2Click(Sender: TObject);

G>begin
G> RichEdit1.DefAttributes.Color := clBlue;
G> RichEdit1.DefAttributes.Style := [fsBold, fsItalic];
G>end;


Пробую так:

RichEdit1->Font->Color = clRed;
RichEdit1->Lines->Add( "This line of text wil be RED" );
RichEdit1->Font->Color = clGreen;
RichEdit1->Lines->Add( "This line of text wil be GREEN" );


В итоге все линии рисуются ЗЕЛЕНЫМ... Подскажите пожалуйста как сделать чтобы первая линия красная была вторая зеленая?
Re[7]: Memo1 цвет линий
От: Аноним  
Дата: 06.05.09 12:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, garant, Вы писали:


G>>Аноним 44 пишет:


>>> А как с помощью RichEdit сделать 2 разноцветные строчки?


G>>В хелпе же есть...


G>>This example requires a TRichEdit and a TButton. Leave the default text,

G>>usually "RichEdit1", in the lines property. The DefAttributes will apply
G>>to this text.

G>>procedure TForm1.Button1Click(Sender: TObject);

G>>begin
G>> with RichEdit1.SelAttributes do
G>> begin
G>> Color := clRed;
G>> Height := Height + 5;
G>> end;
G>> RichEdit1.Lines.Add('This line of text will be red.');
G>>end;

G>>procedure TForm1.Button2Click(Sender: TObject);

G>>begin
G>> RichEdit1.DefAttributes.Color := clBlue;
G>> RichEdit1.DefAttributes.Style := [fsBold, fsItalic];
G>>end;


А>Пробую так:


А>RichEdit1->Font->Color = clRed;

А>RichEdit1->Lines->Add( "This line of text wil be RED" );
А>RichEdit1->Font->Color = clGreen;
А>RichEdit1->Lines->Add( "This line of text wil be GREEN" );


А>В итоге все линии рисуются ЗЕЛЕНЫМ... Подскажите пожалуйста как сделать чтобы первая линия красная была вторая зеленая?


Разобрался надо так:
RichEdit1->SelAttributes->Color = clRed;
RichEdit1->Lines->Add( "This line of text wil be RED" );
RichEdit1->SelAttributes->Color = clGreen;
RichEdit1->Lines->Add( "This line of text wil be GREEN" );
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.