我正试图在我的WordPress博客上发布一些代码片段,但是当我复制并粘贴时,它会从每行代码中删除所有前导空格.一般来说,领先的空间似乎没有问题,因为我可以手动添加它们,但它不喜欢它们被粘贴在任何原因.
是否有一些我可以使用的插件,或者我可以做一些简单的代码修改,让它接受我粘贴的代码而不试图为我格式化它?
我读到早期的C++"编译器"实际上将C++代码翻译成C并在后端使用了C编译器,这让我很奇怪.我已经掌握了足够的技术知识来解决大部分工作原理,但我无法弄清楚如何在没有语言支持的情况下进行类继承.
具体来说,如何定义一个包含几个字段的类,然后是一堆继承自它的子类,每个子类都添加自己的新字段,并能够作为函数参数交替传递它们?特别是当C++允许你在堆栈上分配对象时,你怎么能这样做呢?所以你甚至可能没有指向隐藏的指针?
注意:我得到的前几个答案是关于多态性的.我知道关于多态和虚方法的一切.我甚至曾经做过一次关于Delphi中虚拟方法表如何工作的低级细节的会议演示.我想知道的是类继承和字段,而不是多态.
我从http://sites.google.com/site/dbxfirebird/下载了 Firebird DBX 驱动程序,并且我已经能够编译“测试连接”项目并使其运行。我将它指向我的测试数据库,如下所示:
procedure TMainForm.Button1Click(Sender: TObject);
var C: TSQLConnection;
begin
C := TSQLConnection.Create(Self);
try
C.DriverName := 'FirebirdConnection';
C.Params.Add('User_Name=SYSDBA');
C.Params.Add('Password=masterkey');
C.Params.Add('Database=C:\fbtest\test.fdb');
C.Open;
if C.Connected then
ShowMessage('Connection is active')
finally
C.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它工作正常。但是当我将完全相同的代码放入不同的项目中时,它不起作用。我已将 fbclient.dll(Firebird 嵌入式驱动程序 DLL,重命名为 fbclient)、其所有依赖项和 dbxdrivers.ini 文件复制到与项目的 EXE 运行所在的同一文件夹中。我看不出任何原因这不应该工作,但是对 .Open 的调用失败并显示:
项目 Project1.exe 引发异常类 TDBXError 并显示消息“未知驱动程序:FirebirdConnection”。
同样,这是对 Open 的调用。对 DriverName 的分配工作得很好。以前有人见过这个问题吗?为什么完全相同的代码在测试项目中可以工作,但不同的代码却不能工作,有什么方法可以修复它吗?
我有一个特殊的组合框,其中包含很长的项目列表(几千个),当你打开它时必须计算它.当我测试某些东西时,我惊恐地发现它花了大约一分钟才打开.所以我将程序(相同的构建,相同的选项)连接到Sampling Profiler以查看花了这么长时间,并且只需要大约5秒钟就可以打开.我尝试直接从Windows运行它,这次只花了2-3秒,这是我的预期.
那么,当Delphi调试器连接到它时,为什么完全相同的EXE会使数字变慢25倍以上呢?这并不像评估条件断点那样明显.似乎调试器的存在正在减慢它的速度.有谁知道为什么?
在将SQL查询嵌入到多次调用SQL for Table Updates的应用程序中时,是否可以使用SQL BEGIN TRANSACTION,COMMIT TRANSACTION,ROLLBACK TRANSACTION.例如,我有以下代码:
Q.SQL.ADD(<UPDATE A RECORD>);
Q.ExecSQL;
Q.Close;
Q.SQL.Clear;
Q.SQL.ADD(<Select Some Data>);
Q.Open;
Run Code Online (Sandbox Code Playgroud)
设置一些变量
Q.Close;
Q.SQL.Clear;
Q.SQL.ADD(<UPDATE A RECORD>);
Q.ExecSQL;
Run Code Online (Sandbox Code Playgroud)
我想要做的是如果第二次更新失败,我想回滚第一个事务.
如果我为BEGIN,COMMIT,ROLLBACK设置一个唯一的表示法,以便指定提交或回滚的内容,是否可行.
即在第一次更新之前指定BEGIN TRANSACTION_A然后在上次更新后指定COMMIT TRANSACTION_A
我希望这是有道理的.如果我在SQL存储过程中执行此操作,那么我将能够在过程的开始和结束时指定它,但由于进程块和重载SQL上的死锁,我不得不将代码分解为可管理的块服务器.
我似乎已经创建了破坏内存的代码.
从来没有遇到过这样的问题,我现在设置了一个无效的指针操作.
在下面,我调用PromptForXYZPropertiesSettings后,const字符串sFilename的值被删除.
// Allow the user to quickly display the properties of XYZ without needing to display the full Editor
function PromptForXYZProperties(const sFilename:string; var AXYZProperties: TXYZProperties): boolean;
var
PropEditor: TdlgEditor;
begin
PropEditor:= TdlgEditor.create(nil);
try
PropEditor.LoadFromFile(sFilename); <-- sFilename = 'C:\My Folder\Some Folder.txt'
PropEditor.SelectedXYZProperties := AXYZProperties;
// Bypass PropEditor to show form owned by it
Result := PropEditor.PromptForXYZPropertiesSettings;
if Result then
begin
PropEditor.SaveToFile(sFilename); <-- sFilename now somethign like 'B'#1#0#0'ë' or value of a different var
end;
finally
PropEditor.free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
其他详情: …
我正在Delphi写一个绘画程序.用户在屏幕上单击2个点,并在它们之间绘制一条线.我希望线条消除锯齿.我将此代码放在OpenGL类的create()过程中(在开始时只调用一次):
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
Run Code Online (Sandbox Code Playgroud)
当我开始绘制时,第一行,第二行和第三行被绘制得很好.但有趣的是,当线条数量增加(比如7,8行)时,抗锯齿开始失败!通过在屏幕上添加每一行,它变得更糟,线条边缘开始变得像锯齿!
我也把相同的代码放在我绘制线条的draw()过程的顶部(并且每次点击鼠标都会运行),但没有任何变化.
我在这里做错了吗?有人有什么建议吗?
我正在尝试绘制一个在其轴上旋转的简单晶体.我可以通过绘制一个金字塔,然后将其再次倒置来轻松地获得正确的形状,但我有两个问题.
首先,即使我用相同的颜色绘制所有颜色,其中两个面的颜色与另外两个颜色不同.
其次,它在每个金字塔上放置一个"底部",通过水晶的半透明墙可以看到,这会破坏效果.有没有办法摆脱它?
这是我用来设置和绘制GL场景的代码.当然,还有比这更多的OpenGL代码,但这是相关的部分.
procedure Initialize;
begin
glShadeModel(GL_SMOOTH);
glClearColor(0.0, 0.0, 0.0, 0.5);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
end;
procedure Draw; //gets called in a loop
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-1.5,-0.5,-6.0);
glRotatef(rotation,0.0,1.0,0.0);
glBegin(GL_TRIANGLE_FAN);
glColor4f(0, 0, 1, 0.2);
glVertex3f(0, 3.4, 0);
glVertex3f(-1, 0, -1);
glVertex3f(-1, 0, 1);
glVertex3f(1, 0, 1);
glVertex3f(1, 0, -1);
glVertex3f(-1, 0, -1);
glEnd;
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0, -3.4, 0);
glVertex3f(-1, 0, -1);
glVertex3f(-1, 0, 1);
glVertex3f(1, 0, 1);
glVertex3f(1, 0, -1);
glVertex3f(-1, 0, -1);
glEnd;
rotation := …Run Code Online (Sandbox Code Playgroud) 我有一个这样的 TForm:
TMyForm = class (TForm)
[MyAttr('Data')]
edit1: TEdit;
private
FData: String;
end
Run Code Online (Sandbox Code Playgroud)
当我尝试通过 RTTI 获取此表单的字段时,我只获取了 edit1 字段,而不是 FDATA,并且当我查询 edit1 字段属性时,会得到一个空数组。
对于另一个不继承 TForm 的类,一切正常。为什么?
编辑样品
type
{$RTTI EXPLICIT FIELDS([vcPrivate,vcProtected, vcPublic])}
TForm3 = class(TForm)
[TCustomAttribute]
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
[TCustomAttribute]
FData: String;
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var
LCtx: TRttiContext;
LField: TRttiField;
LAttr: TCustomAttribute;
begin
for LField in LCtx.GetType(Self.ClassInfo).GetDeclaredFields do
begin
Memo1.Lines.Add(lField.Name);
for …Run Code Online (Sandbox Code Playgroud) 在Firebird中,有一个聚合调用List()将多个结果转换为以逗号分隔的字符串.
此功能似乎不存在于SQL Server中.有没有相当于它不涉及使用或构建自己的CLR UDF 的大,长,丑,慢的解决方法for xml?(是的,我知道那些方法.寻找我可能不知道的东西.)
delphi ×7
delphi-2010 ×2
opengl ×2
c ×1
c++ ×1
debugging ×1
firebird ×1
formatting ×1
history ×1
inheritance ×1
memory ×1
oop ×1
plugins ×1
rtti ×1
slowdown ×1
sql ×1
sql-server ×1
wordpress ×1