主页
Top.Mail.Ru Yandeks.Metrika
论坛:“主要”;
当前存档:2002.04.01;
下载:[xml.tar.bz2];

向下

如何写一个多色的题词? 找到类似的分支


Andrey007   (2002-03-18 17:05) [0]

也就是说,首先字母是黑色,然后是绿色,然后是红色? 此题字应显示在TTabSheet.Caption中。



MBo   (2002-03-18 17:23) [1]

一切都可以在OnDrawTab中完成。 最近,论坛似乎是



Andrey007   (2002-03-18 17:44) [2]

是的,我发现了这条消息 - http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1016001677&n=0,但有一点关于此。 关于如何完全改变整个铭文的颜色。 但是如何改变铭文中单个字母的颜色?



Макс Черных   (2002-03-18 23:02) [3]

多色的题字不是那么容易画的。
这是我曾经写过的一个例子
向一位朋友展示这个奇迹是如何完成的
(更准确地说,目标是突出文本的某​​些部分)。
在1项目中,1 TImage组件所在的表单
画布和绘画。 自从这个例子成立以来
匆匆,它自然有点歪,但是
可以理解该原则,特别是如果您阅读函数GetTextExtentExPoint的描述

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Types;

type
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
private
Ftext : string;
public
procedure Test;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Ftext :=
"Время больше не давит на игрока! На каждый вопрос вам дается 2 минуты " +
"Введен предварительный конкурс, как это происходит и в телевизионной игре. " +
"MarkRect.Left := Swidths[16] + 2; " +
"Right := Swidths[12]+ 2; ";
Test;
end;

procedure TForm1.Test;
var R, Mr : TRect; W : Integer; NumFit : Integer;
Swidths : array[0..300] of Integer; p7 : tagSize;
S, Sd, Sm : string; HighLights : array of string;
begin
SetLength(HighLights, 3);
HighLights[0] := "";
HighLights[1] := "";
HighLights[2] := "";
R := Rect(0, 0, 500, 250);
With Image1 do begin
Canvas.Brush.Color := clWindow;
Canvas.FillRect(R);
Canvas.Font.Name := "Arial";
Canvas.Font.Size := 10;
R := Rect(10, 10, 200, 240);
S := Ftext;
W := 190;
Repeat
GetTextExtentExPoint(Canvas.Handle, Pchar(S), Length(S), W,
@NumFit, PInteger(@Swidths), p7);
While S[NumFit] <> " " do dec(NumFit);
Sd := Copy(S, 1, NumFit);
Canvas.Brush.Color := clWindow;
Canvas.Font.Color := clBlack;
DrawText(Canvas.Handle, Pchar(Sd), -1, R, DT_LEFT{ or DT_WORDBREAK});
Mr := R;
Mr.Left := Swidths[7] -2;// -1;
Sm := Copy(Sd, 7, 6);
Canvas.Brush.Color := clYellow;
Canvas.Font.Color := clRed;
TextOut(Canvas.Handle, Swidths[8] -5, R.Top, Pchar(Sm), Length(Sm));
Delete(S, 1, NumFit);
inc(R.Top, p7.cy);
until S = "";
end;
end;

end.



MBo   (2002-03-20 08:04) [4]

顺便说一下,我没有马上思考 - 为了在书签上绘制外来物,使用Images属性的最简单方法是绘制各种图片,将它们写在ImageList中就是这样。



deleon   (2002-03-20 09:04) [5]

以TVVMColorLabel为例 - 您需要的!
http://www.dbwork.kuban.ru



Andrey007   (2002-03-20 10:12) [6]

嗯,总的来说,我是这样做的:
文字在斜线之间着色。 有一个题字,如“数量(500:400 / 70 / 30):”。 70用绿色写,30用红色写。

procedure TForm1.FormPaint(Sender: TObject);
var Zelen,Krasn: String;
i,j,be,en: Integer;
r: TRect;
begin // Uvp - это TTabSheet
if pos("/",Uvp.Caption)=0 then Exit;
en:=length(Uvp.Caption); be:=1; j:=0; // j - счётчик косых линий
for i:=1 to length(Uvp.Caption) do if Uvp.Caption[i]="/" then
begin // зелёный цвет
if j=0 then be:=i else if j=1 then
begin
Krasn:=Copy(Uvp.Caption,1,be);
Zelen:=Copy(Uvp.Caption,be+1,i-be-1);
R:=PageControl.TabRect(1);
if PageControl.ActivePage=Uvp
then R:=Rect(R.Left+PageControl.Canvas.TextExtent(Krasn).cx+6,R.Top+2,
R.Left+PageControl.Canvas.TextExtent(Krasn).cx+
PageControl.Canvas.TextExtent(Zelen).cx+6,R.Bottom)
else R:=Rect(R.Left+PageControl.Canvas.TextExtent(Krasn).cx+6,R.Top+4,
R.Left+PageControl.Canvas.TextExtent(Krasn).cx+
PageControl.Canvas.TextExtent(Zelen).cx+6,R.Bottom);
PageControl.Canvas.Font.Color:=RGB(0,150,0);
PageControl.Canvas.Brush.Color:=clBtnFace;
DrawText(PageControl.Canvas.Handle,Pchar(Zelen),-1,R,DT_LEFT);
en:=i
end;
inc(j)
end
else if Uvp.Caption[i]=")" then
begin // красный цвет
Krasn:=Copy(Uvp.Caption,1,en);
TabCtrl_GetItemRect(PageControl.Handle,1,R); // это тоже самое, что и R:=PageControl.TabRect(1);
Zelen:=Copy(Uvp.Caption,en+1,i-en-1);
if PageControl.ActivePage=Uvp
then R:=Rect(R.Left+PageControl.Canvas.TextExtent(Krasn).cx+6,R.Top+2,
R.Left+PageControl.Canvas.TextExtent(Krasn).cx+
PageControl.Canvas.TextExtent(Zelen).cx+6,R.Bottom)
else R:=Rect(R.Left+PageControl.Canvas.TextExtent(Krasn).cx+6,R.Top+4,
R.Left+PageControl.Canvas.TextExtent(Krasn).cx+
PageControl.Canvas.TextExtent(Zelen).cx+6,R.Bottom);
PageControl.Canvas.Font.Color:=RGB(200,0,0);
PageControl.Canvas.Brush.Color:=clBtnFace;
DrawText(PageControl.Canvas.Handle,Pchar(Zelen),-1,R,DT_LEFT);
end
end;



Страницы: 1 整个分支

论坛:“主要”;
当前存档:2002.04.01;
下载:[xml.tar.bz2];

楼上





内存:0.57 MB
时间:0.028 c
6-279
Pimin
2002-01-18 03:08
2002.04.01
填写表格Twebbrowserom


14-304
Viktor55
2002-02-17 22:20
2002.04.01
正常使用下的电脑性能


1-113
沃洛佳
2002-03-21 14:43
2002.04.01
什么样的错误?


1-253
rundll32
2002-03-20 20:46
2002.04.01
键盘布局


14-316
mr_X
2002-02-13 17:24
2002.04.01
谁将告诉谁将告诉你哪里可以获得资源文件,各种图标bmp-shki等。





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法语
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 淡米尔文 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский