我知道如何将枚举类型转换为整数.
type
TMyType = (mtFirst, mtSecond, mtThird);
var
ordValue:integer;
enumValue:TMyType;
...
ordValue:= Ord(mtSecond); // result is 1
Run Code Online (Sandbox Code Playgroud)
但是,如何进行逆运算并将整数转换为枚举类型?
我在哪里可以找到几何算法,它可以回答"简单"问题,如果有两个线交叉,如果一个点在多边形内,依此类推.
我擅长数学,但这个主题对我来说有点过时了.但令我惊讶的是,我找不到合适的例程,解决了这些问题.
我想在应用程序启动之前获取字符串的文本宽度.在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) 我想问一下有经验的用户,如果您更喜欢使用数据感知控件在数据库中添加,插入,删除和编辑数据,或者您愿意这样做.
我开发了一些数据库应用程序,其中为了"用户友好的策略",我遇到了复杂的表事件网络(afterinsert,afteredit,after ...和beforeedit,beforeinsert,之前......).之后,调试应用程序是一项非常讨厌的工作.
意识到这种风险(后来由另一个应用程序)我试图避免这个问题,所以我更加注意编写代码,可读性和全面性.从一开始它似乎一切都好,但由于我需要在发送和加载数据之前处理一些预处理内容,我再次遇到同样的问题,"慢慢地,不可避免地".有时候无论如何我都无法使用数据控件,而DAControl在开始时看起来像是一个"酷"的功能,最终会成为一个障碍.我"必须"为非数据控件控件编写特殊例程,以便表现为数据感知.然后我问自己,为什么我应该使用数据控件?在非数据控件控件上找到应用程序架构是否更好?当然,它需要更多时间来编写防错代码,但是它值得吗?我不知道...
我几次遇到过我,就像jinxed:天堂开始时的地狱......
我不知道,如果我用错误的方法编写DB程序,如果有一些标准的通用做法如何进行.或者,如果这是每个人的常见问题?
Thanx的建议和你的经验
有没有人知道这个技巧,如何在其事件处理程序中自由控制?根据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)
应该怎样做才能达到同样的效果?
感谢名单
是否有任何简单的通用方法将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)
感谢名单
请问,有人可以解释一下,在这段代码中会出现什么异常?
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,所以我曾经使用过一次异常处理.我认为上面的代码是由熟练的程序员编写的,我不认为异常是多余的.但是,在这个概念中使用异常处理对我来说仍然是一个谜.它似乎是一个安全的代码(没有尝试除了结束).我已经多次看到类似这样的代码片段,这就是为什么尽管有我的经验,这可能是一个很好的理由以这种方式编写,但这并不是必要的.
此外,当事情失败时,我会得到异常描述......
感谢名单
我有这种记录类型
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,所以我希望没有问题,读/写记录类型的属性,但现在看来,这是不可能的(?)谷歌搜索没有告诉太多.
想象你有2个texfiles(让我们说500kB - 3 MB大):第一个是原始的,第二个是这个原始的更新.如何查找,更改(插入,删除)的内容以及更改发生的位置(在更新文件中与原始文件进行比较)?
谢谢你的想法......
也许我错了,但是...我想模拟字符间距.我将单词(文本)分成单个字符列表,测量它们的宽度,然后在位图上一个接一个地绘制它们.我想,渲染文本的整体宽度将与整个未分割字符串的宽度相同,但有一些错误.在循环中渲染字符显示更广泛的结果.有没有办法获得共同(预期)的结果?
这是一段代码:
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)