小编lyb*_*rko的帖子

如何将整数转换为枚举类型?

我知道如何将枚举类型转换为整数.

type
  TMyType = (mtFirst, mtSecond, mtThird); 

var 
  ordValue:integer;
  enumValue:TMyType;
...
ordValue:= Ord(mtSecond); // result is 1
Run Code Online (Sandbox Code Playgroud)

但是,如何进行逆运算并将整数转换为枚举类型?

delphi integer enumeration casting

23
推荐指数
3
解决办法
2万
查看次数

我在哪里可以找到基本的几何例程?

我在哪里可以找到几何算法,它可以回答"简单"问题,如果有两个线交叉,如果一个点在多边形内,依此类推.

我擅长数学,但这个主题对我来说有点过时了.但令我惊讶的是,我找不到合适的例程,解决了这些问题.

delphi

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

如何获取字符串的TextWidth(没有Canvas)?

我想在应用程序启动之前获取字符串的文本宽度.在Application.MainForm画布出现之前,一切正常.问题是,当我尝试在应用程序的OnCreate事件中动态创建TOrdinarium时.主窗体,"Canvas不允许绘图"错误发生.(Application.MainForm是零......).我尝试了几种动态创建Canvas的方法(其中一种是在下面编写的),但它无法测量文本大小而不附加到父级控件.

是否有办法让它以某种方式工作?

感谢名单

我试过这个:

  TOrdinarium = class (TCustomControl)
    private 
       function GetVirtualWidth:integer;
    end;

constructor TOrdinarium.Create(AOwner:TComponent);
begin
 inherited;
 Width:=GetVirtualWidth;
end; 

function TOrdinarium.GetVirtualWidth:integer;
var  ACanvas : TControlCanvas;
  begin
  ACanvas := TControlCanvas.Create;
  TControlCanvas(ACanvas).Control := Application.MainForm; 
  ACanvas.Font.Assign(Font);

  result:=ACanvas.TextWidth('0');

  ACanvas.Free;
  end;
Run Code Online (Sandbox Code Playgroud)

delphi

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

如何"正确"使用数据感知控件?

我想问一下有经验的用户,如果您更喜欢使用数据感知控件在数据库中添加,插入,删除和编辑数据,或者您愿意这样做.

我开发了一些数据库应用程序,其中为了"用户友好的策略",我遇到了复杂的表事件网络(afterinsert,afteredit,after ...和beforeedit,beforeinsert,之前......).之后,调试应用程序是一项非常讨厌的工作.

意识到这种风险(后来由另一个应用程序)我试图避免这个问题,所以我更加注意编写代码,可读性和全面性.从一开始它似乎一切都好,但由于我需要在发送和加载数据之前处理一些预处理内容,我再次遇到同样的问题,"慢慢地,不可避免地".有时候无论如何我都无法使用数据控件,而DAControl在开始时看起来像是一个"酷"的功能,最终会成为一个障碍.我"必须"为非数据控件控件编写特殊例程,以便表现为数据感知.然后我问自己,为什么我应该使用数据控件?在非数据控件控件上找到应用程序架构是否更好?当然,它需要更多时间来编写防错代码,但是它值得吗?我不知道...

我几次遇到过我,就像jinxed:天堂开始时的地狱......

我不知道,如果我用错误的方法编写DB程序,如果有一些标准的通用做法如何进行.或者,如果这是每个人的常见问题?

Thanx的建议和你的经验

database delphi

13
推荐指数
2
解决办法
2097
查看次数

如何在其事件处理程序中自由控制?

有没有人知道这个技巧,如何在其事件处理程序中自由控制?根据delphi帮助它是不可能的......

当Self.Text =''时,我想释放动态创建的TEdit.

TAmountEdit = class (TEdit)
.
.
public
  procedure KeyUp(var Key: Word; Shift :TShiftState);
end;

procedure TAmountEdit.KeyUp(var Key: Word; Shift :TShiftState);
begin
inherited;
if Text='' then Free; // after calling free, an exception arises
end;
Run Code Online (Sandbox Code Playgroud)

应该怎样做才能达到同样的效果?

感谢名单

delphi

10
推荐指数
2
解决办法
3058
查看次数

有没有办法将2个数组合二为一?

是否有任何简单的通用方法将2个数组添加到一个?在下面的情况下,不可能简单地使用C := A + B声明...我想避免每次都为它做算法.

TPerson = record
    Birthday: Tdate;
    Name, Surname:string;
end;

Tpeople = array of TPerson;

var A, B, C:Tpeople;

C:=A+B; // it is not possible
Run Code Online (Sandbox Code Playgroud)

感谢名单

arrays delphi concatenation

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

为什么在明显"安全"的代码中使用异常处理?

请问,有人可以解释一下,在这段代码中会出现什么异常?

function CreateBibleNames: TStrings;
begin
  Result := TStringList.Create;
  try
    Result.Add('Adam');
    Result.Add('Eva');
    Result.Add('Kain');
    Result.Add('Abel');
  except
    Result.Free;
    raise;
  end;      
end;
Run Code Online (Sandbox Code Playgroud)

因为我使用delphi,所以我曾经使用过一次异常处理.我认为上面的代码是由熟练的程序员编写的,我不认为异常是多余的.但是,在这个概念中使用异常处理对我来说仍然是一个谜.它似乎是一个安全的代码(没有尝试除了结束).我已经多次看到类似这样的代码片段,这就是为什么尽管有我的经验,这可能是一个很好的理由以这种方式编写,但这并不是必要的.

此外,当事情失败时,我会得到异常描述......

感谢名单

delphi try-except

6
推荐指数
3
解决办法
747
查看次数

如何使用TypInfo单元获取'record'类型的属性

我有这种记录类型

TDoublePoint = record
               X : Double;
               Y : Double;
               end;
Run Code Online (Sandbox Code Playgroud)

然后我有这个属性的对象

uses ..TypInfo;

TCell = class(TPersistent)
  private
    FZoom : TDoublePoint 
  published
    property Zoom : TDoublePoint read FZoom write FZoom;
end;
Run Code Online (Sandbox Code Playgroud)

但是当我想用这个函数得到这个属性的PropInfo时:

function GetKind(AObject:TObject; Propertyname :shortstring):TTypeKind;
var p :ppropinfo;
begin
  p:=GetPropInfo(AObject, Propertyname);  // <p = nil
  Result:= p^.proptype^.Kind;
end;
Run Code Online (Sandbox Code Playgroud)

.. ..

c := TCell.Create;
GetKind(c, 'Zoom');  //   <- error
c.Free;
Run Code Online (Sandbox Code Playgroud)

我得到错误,因为变量p在函数中是nil.

但为什么?有tkRecord在TTypeKind,所以我希望没有问题,读/写记录类型的属性,但现在看来,这是不可能的(?)谷歌搜索没有告诉太多.

delphi delphi-7

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

2个文本文件的比较:进行了哪些更改?

想象你有2个texfiles(让我们说500kB - 3 MB大):第一个是原始的,第二个是这个原始的更新.如何查找,更改(插入,删除)的内容以及更改发生的位置(在更新文件中与原始文件进行比较)?

  1. 某处有工具或图书馆吗?
  2. 在任何众所周知的文本编辑器中都有这个功能吗?
  3. 有人知道算法吗?或者大规模解决它的常用方法是什么?
  4. 如果遇到这种问题,你会怎么做?

谢谢你的想法......

string algorithm

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

如何精确测量字符的宽度?

也许我错了,但是...我想模拟字符间距.我将单词(文本)分成单个字符列表,测量它们的宽度,然后在位图上一个接一个地绘制它们.我想,渲染文本的整体宽度将与整个未分割字符串的宽度相同,但有一些错误.在循环中渲染字符显示更广泛的结果.有没有办法获得共同(预期)的结果?

这是一段代码:

private struct CharWidths
{
    public char Char;
    public float Width;
}

private List<CharWidths> CharacterWidths = new List<CharWidths>();
Run Code Online (Sandbox Code Playgroud)

...

private void GetCharacterWidths(string Text, Bitmap BMP)
{
    int i;
    int l = Text.Length;
    CharacterWidths.Clear();
    Graphics g = Graphics.FromImage(BMP);

    CharWidths cw = new CharWidths();
    for (i = 0; i < l; i++)
    {
        Size textSize = TextRenderer.MeasureText(Text[i].ToString(), Font);
        cw.Char = Text[i];
        cw.Width = textSize.Width;
        CharacterWidths.Add(cw);
    }
}
Run Code Online (Sandbox Code Playgroud)

...

public void RenderToBitmap(Bitmap BMP)
{
    //MessageBox.Show("color");

    Graphics g = Graphics.FromImage(BMP);
    GetCharacterWidths("Lyborko", BMP);

    int …
Run Code Online (Sandbox Code Playgroud)

.net c# character width

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