我想缩短文件名以适应TEdit,比如
Edit1.Text := MinimizeName(FileName, Edit1.Canvas, Edit1.Width);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不能编译,因为TEdit Canvas直接拥有属性.其字体指标需要画布.如何访问TEdit的画布?
(MinimizeName在Vcl.FileCtrl中声明.)
有没有办法为TCanvas.LineTo方法设置lineends的样式?它似乎默认为圆形末端,当Pen.Width设置为较大的值(例如9)时,对于不同颜色的行中的几行看起来非常糟糕.
它看起来像这样(圆形末端):
********........******
**********........******
**********........******
********........******
Run Code Online (Sandbox Code Playgroud)
(其中*是例如蓝色,而.是黄色)
如果在中线之后绘制两条外线,情况会更糟:
********........******
**********......********
**********......********
********........******
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样(streight结束):
********........******
********........******
********........******
********........******
Run Code Online (Sandbox Code Playgroud)
Pen似乎没有为此提供任何设置,LineTo方法也没有.可能有我可以调用的Windows API函数吗?
我正在尝试为a编写自定义绘制单元格方法TDBGridEh.问题是,当我改变笔,画笔的属性时......绘画变得混乱.那是因为控件在调用事件后会做一些额外的绘画.所以我必须保留所有道具,然后在我自己的画完成后重置它们.
我尝试创建自己的TControlCanvas并为其分配网格,但我得到一个带有消息的运行时异常:
无法将TControlCanvas分配给TControlCanvas
,表示该AssignTo方法TControlCanvas未针对其祖先实施,也未针对其祖先实施.所以我的问题是:
为什么TControlCanvas没有AssignTo方法?问题是什么?
如何保留和恢复TControlCanvas的所有属性?而我的意思的东西比创造更便捷TPen,TBrush,TFont,等.
我正在使用TCanvas绘制文本TextOut()但我需要不同的文本颜色.
我能做什么?
我编写了一个例程,它应该为位图添加一个虚线边框:
procedure AddDottedBorderToBitmap(aBM: Vcl.Graphics.TBitmap);
var
c: TCanvas;
begin
c := aBM.Canvas;
c.Pen.Color := clBlack;
c.Pen.Mode := pmXor;
c.Pen.Style := psDot;
c.MoveTo(0, 0);
c.LineTo(0, aBM.Height - 1);
c.LineTo(aBM.Width - 1, aBM.Height - 1);
c.LineTo(aBM.Width - 1, 0);
c.LineTo(0, 0);
end;
Run Code Online (Sandbox Code Playgroud)
但是当放大结果时,生成的边界而不是点似乎是由小破折号组成的:
它是否正确?如果没有,我怎么能得到真正的点而不是破折号?
问题是:我在桌面上绘制一些矩形,而鼠标移动(矩形大小增加)我没有滞后,人工制品等,一切都很好:

但是当我将矩形调整到低于它的尺寸时,我有了人工制品:

红色矩形是真正的矩形,其他都是bug.
完美的解决方案是重绘画布,但在鼠标移动时我不能一直这样做.
移动后鼠标绝对停止时有解决办法吗?
更新
代码:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm2 = class(TForm)
Timer1: TTimer;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
isDown: Boolean;
downX, downY: Integer;
public
{ Public declarations }
Bild: TBitMap;
end;
implementation …Run Code Online (Sandbox Code Playgroud) delphi ×6
tcanvas ×6
canvas ×1
delphi-xe8 ×1
desktop ×1
draw ×1
gdi ×1
graphics ×1
screenshot ×1
winapi ×1