А>Подскажите пожалуйста как вывести в 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");
Здравствуйте, Аноним, Вы писали:
А>>>Подскажите пожалуйста как вывести в Memo1 линии разных цветов? А>>>Можно ли это вообще сделать?
T>>Рисует черную линию на компоненте мемо:
А>Использую C++Builder 6:
А>Memo1->Lines->Add("Hello Word BLACK"); А>Memo1->Lines->Add("Hello Word BLUE");
Ну и? У тебя же ясно сказано — первая линия — черная, вторая — синяя
Если серьезно — скачай себе пакет SynEdit и используй его OnSpecialLine событие... Если использование Memo не критично — замени его на ListBox/ListView например и рисуй линии сам в OnCustomDrawItem().
Здравствуйте, 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 разноцветные строчки?
Аноним 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;
Здравствуйте, 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" );