小编Sve*_*sli的帖子

设置Paintbox的fontsize会导致调用OnPaint

我需要写一些文本到paintbox,我在OnPaint事件中做.当我在方法中设置两次 fontsize时,会重复调用OnPaint事件.

要亲眼看看,试试这个:

  1. 创建一个新的VCL Forms应用程序
  2. 在表单上放置一个paintbox
  3. 将以下代码放在OnPaint事件中:
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  PaintBox1.Canvas.MoveTo(random(PaintBox1.Width),random(PaintBox1.Height));
  PaintBox1.Canvas.LineTo(random(PaintBox1.Width),random(PaintBox1.Height));

  PaintBox1.Font.Size := 10; 
  PaintBox1.Font.Size := 12; 
end;

当您运行该应用程序时,您将在paintbox上看到一条"跳"的线.但是,如果删除设置fontsize的一条或两条线,您将看到一条固定线.

为什么会发生这种情况,我该怎么做才能解决这个问题?

delphi graphics onpaint

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

如何判断字符串是否是网址?

确定字符串是否代表网址的最佳方法是什么?我需要让用户在表单中输入网址,但如何验证输入?应允许用户输入" http://www.google.com "或"www.vg.no" 等字符串,但不应要求他输入"http://".此外,有像"tv2.no"这样的网页更难以验证.如果我检查字符串是否包含"www"或"http://"我有一个强有力的线索,但我仍然不是100%肯定.我能100%肯定吗?我不这么认为,但也许SO的一些优秀思想能够启发我吗?

html url

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

当我不知道名称时如何重命名约束

我需要重命名 Oracle 数据库中的约束,但在设计时我不知道旧名称。

我想做的是:

declare
  vOldName string;
begin
  select CONSTRAINT_NAME 
  into   vOldName 
  from   user_constraints 
  where  TABLE_NAME='AGREEMENT' and CONSTRAINT_TYPE='R';

  alter table Agreement rename constraint vOldName to AGREEMENT_FK1; 
end;
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息“PLS-00103:在预期以下情况之一时遇到符号“ALTER”:开始案例“。

我该如何解决这个问题?

sql oracle constraints

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

在Delphi中:如何在不使用参数的情况下找到递归深度?

当我创建递归方法时,我经常包含一个Depth参数,特别是当我需要某种救助机制时.代码通常是这样的

procedure Recurse(<Params>; aDepth : integer = 0);
begin
  if aDepth > SomeLimit then
  begin
    //Tidy up, return best result found>
    exit;
  end;

  <stuff>

  if <Condition> then
    Recurse(<Params>; aDepth+1)
  else 
  begin 
    //Tidy up, return result of endnode>
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我称之为没有Depth参数

Recurse(<Params>);
Run Code Online (Sandbox Code Playgroud)

还有另一种方法可以轻松找到深度吗?

delphi recursion

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

当包含与客户端对齐的控件时,如何将帧还原为继承?

我有时会设计一个框架,那里到处都有控件.它可以是具有align = alClient的网格,也可能是某些面板和分割器.或者它可能完全是另一回事.无论如何,当我想"恢复为继承"时,我必须通过设置align = alNone并移动控件或直接编辑DFM来为右键单击腾出空间.这有点麻烦.当然,这种情况很少发生,不是什么大不了的事,但仍然会让我感到困扰.如果我可以在结构视图中右键单击它会有所帮助,但是,这不起作用.

有没有人注意到这一点,如果是这样的话; 你如何解决?像我一样,沉默(好,至少)至少是烦恼,还是你找到了一个出色的解决方案?

delphi form-design dfm

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

TPNGImage上的Stretchdraw

当我使用位图调用canvas.stretchdraw时,当左>右时,位图将被镜像/翻转.PNG不会发生这种情况.这是一个错误吗?我该怎么办才能修复它?

要复制,请尝试以下代码:

procedure TForm1.TestStretchdraw;
var
  vBMP: TBitmap;
  vPNG: TPNGImage;
  X0,Y0,X1,Y1 : integer;
  R : TRect;

  procedure FlipRect;
  var
    T : integer;
  begin
    T := R.Left;
    R.Left := R.Right;
    R.Right := T;
  end;

begin
  vBMP := TBitmap.Create;
  vPNG := TPNGImage.Create;
  try
    vBMP.LoadFromFile('c:\temp\pic\pic.bmp');
    vPNG.LoadFromFile('c:\temp\pic\pic.png');

    X0 := 0;
    Y0 := 0;
    X1 := X0 + vBMP.Width;
    Y1 := Y0 + vBMP.Height;
    R := Rect(X0,Y0,X1,Y1);
    FlipRect;
    Canvas.StretchDraw(R,vBMP); //This image will be drawn mirrored

    X0 := vBMP.Width+10;
    Y0 := 0;
    X1 := X0 + vPNG.Width; …
Run Code Online (Sandbox Code Playgroud)

delphi graphics png

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

在Oracle中,我可以执行"将值插入或更新到TABLE"

我有一个包含两个数字列的表,以及对它们的唯一约束.我想插入一对新的值,除非该对已经存在.最简单的方法是什么?

如果我做

insert into TABLE values (100,200) 
Run Code Online (Sandbox Code Playgroud)

并且该对已经存在我得到ORA-00001错误,所以我想做类似的事情

insert or update into TABLE values (100,200)
Run Code Online (Sandbox Code Playgroud)

sql oracle ora-00001

0
推荐指数
1
解决办法
421
查看次数

标签 统计

delphi ×4

graphics ×2

oracle ×2

sql ×2

constraints ×1

dfm ×1

form-design ×1

html ×1

onpaint ×1

ora-00001 ×1

png ×1

recursion ×1

url ×1