标签: tcanvas

如何在Delphi中获得TEdit的画布?

我想缩短文件名以适应TEdit,比如

Edit1.Text := MinimizeName(FileName, Edit1.Canvas, Edit1.Width);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不能编译,因为TEdit Canvas直接拥有属性.其字体指标需要画布.如何访问TEdit的画布?

(MinimizeName在Vcl.FileCtrl中声明.)

delphi tcanvas delphi-xe8

6
推荐指数
2
解决办法
1938
查看次数

为Canvas.LineTo设置lineend样式

有没有办法为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函数吗?

delphi winapi gdi tcanvas

5
推荐指数
1
解决办法
1259
查看次数

如何保留TControlCanvas的所有属性并在以后恢复?

我正在尝试为a编写自定义绘制单元格方法TDBGridEh.问题是,当我改变笔,画笔的属性时......绘画变得混乱.那是因为控件在调用事件后会做一些额外的绘画.所以我必须保留所有道具,然后在我自己的画完成后重置它们.

我尝试创建自己的TControlCanvas并为其分配网格,但我得到一个带有消息的运行时异常:

无法将TControlCanvas分配给TControlCanvas

,表示该AssignTo方法TControlCanvas未针对其祖先实施,也未针对其祖先实施.所以我的问题是:

  1. 为什么TControlCanvas没有AssignTo方法?问题是什么?

  2. 如何保留和恢复TControlCanvas的所有属性?而我的意思的东西比创造更便捷TPen,TBrush,TFont,等.

delphi graphics tcanvas

4
推荐指数
2
解决办法
285
查看次数

如何更改TCanvas(delphi)的textOut的颜色?

我正在使用TCanvas绘制文本TextOut()但我需要不同的文本颜色.

我能做什么?

delphi tcanvas

4
推荐指数
1
解决办法
5359
查看次数

在TBitmap周围绘制点的边界线?

我编写了一个例程,它应该为位图添加一个虚线边框:

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)

但是当放大结果时,生成的边界而不是点似乎是由小破折号组成的:

在此输入图像描述

它是否正确?如果没有,我怎么能得到真正的点而不是破折号?

delphi draw tcanvas delphi-10.1-berlin

3
推荐指数
1
解决办法
283
查看次数

如何及时重新绘制画布?

问题是:我在桌面上绘制一些矩形,而鼠标移动(矩形大小增加)我没有滞后,人工制品等,一切都很好: 在此输入图像描述

但是当我将矩形调整到低于它的尺寸时,我有了人工制品: 在此输入图像描述

红色矩形是真正的矩形,其他都是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 desktop screenshot canvas tcanvas

2
推荐指数
1
解决办法
1811
查看次数