这个问题可能很容易,但我真的无法在网上找到真正的答案.我已经知道我可以使用FireDac连接到存储在我的计算机中的sqlite数据库,但现在我想继续使用在线sql服务器.
我拥有一个带有sql server的域名.
这是我的配置,它告诉我Unknown configuration host.我需要在线连接到我的sql数据库.FireDAC是真正的解决方案吗?
我有这种连接字符串服务器端:
$pdo = new PDO('mysql:host=mysql.netsons.com;dbname=caorobwq_worldcup', 'username', 'password');
Run Code Online (Sandbox Code Playgroud) 我试图理解名为"variadic"的C++ 11特性.看看这个简单的代码:
#include <iostream>
using namespace std;
template<typename T, typename... Args>
T adder(T first, Args... args) {
return first + adder(args...);
}
int main() {
int c = adder(1,8,4);
cout << c << endl;
cout << "Hello World!" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
阅读c ++入门书籍我已经理解它们以递归方式工作,我也看到在递归调用中,args...部分被传递.
我正在使用MinGW 5和QtCreator来测试它.看
好的,要修复我可以调用的太少的参数,adder(first, args...)但现在递归不正确并且程序崩溃了.该怎么办?我无法理解如何做到这一点.
在线查看我发现了一个这样的例子
template <typename T, typename... Rest>
double sum(T t, Rest... rest) {
return t + sum(rest...);
}
Run Code Online (Sandbox Code Playgroud)
它基本相同.我是否必须使用显式(非模板)返回类型?
当我必须创建在我的应用程序中多次使用的小部件的“模板”时,我使用了很多 StatelessWidgets,因为文档是这样说的:
当您描述的用户界面部分不依赖于对象本身中的配置信息和小部件在其中膨胀的 BuildContext 之外的任何其他内容时,无状态小部件很有用。
下面是一个例子:
class StepInputButton extends StatelessWidget {
final int pos;
final String value;
const StepInputButton({
this.pos,
this.value
});
@override
Widget build(BuildContext context) {
return Row(
// Text, Icon and a tiny button
);
}
}
Run Code Online (Sandbox Code Playgroud)
以上很好,因为我可以const StepInputButton(val, "val"),在代码中使用 CONST 来提高性能。
问题
我正在使用著名的Provider小部件来管理我的应用程序的状态和页面通常如下所示:
class SuccessPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
var prov = Provider.of<Type>(context);
return Scaffold(...);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的带有 Scaffold 的应用程序页面,它有一个抽屉、一个浮动操作按钮和一个 appTitle。在这里,我使用 StatelessWidget,因为我不使用 setState(),因为 provider 为我完成了所有工作。但他们仍然在官方颤振文档中说:
对于可以动态更改的组合,例如由于具有内部时钟驱动状态或取决于某些系统状态,请考虑使用 StatefulWidget。
所以我不得不改变class …
我知道Variants转换数据类型时速度很慢,即使我只是添加两个保持整数的变量值.我还发现了另一个看似变体的类似东西TValue.
他们之间有什么区别?
我正在考虑使用它进行经典的速度测试TStopWatch,但我不认为它足以理解差异
我有一个TVertScrollBox带有TRectangle 的控件.当我点击一个按钮时,我取出那个矩形,然后在滚动框内复制20次.
// var Rectangle: TRectangle;
VertScrollBox.BeginUpdate;
for i := 0 to 19 do
begin
//Copy the rectangle that is already inside the ScrollBox
Rectangle:= TRectangle(RectangleTemplate.Clone(VertScrollBox));
VertScrollBox.AddObject(Rectangle);
end;
VertScrollBox.EndUpdate;
Run Code Online (Sandbox Code Playgroud)
所以情况看起来像这样:
问题
当我按下另一个按钮时,我需要删除除第一个之外的滚动机器人中的每个矩形.
我正在做相反的操作.为了做到这一点,我从SO中找到的答案中获取了代码,该答案表明我应该向后运行循环:
for j := VertScrollBox.ChildrenCount-1 downto 1 do
if (VertScrollBox.Children[j] is TRectangle) then
VertScrollBox.RemoveObject(VertScrollBox.Children[j]);
Run Code Online (Sandbox Code Playgroud)
此代码不起作用,因为不删除矩形.那是因为我Parent在添加时没有为矩形设置?
我也尝试了类似RemoveObject(TRectangleVertScrollBox.Children[j]))但仍然没有的东西.
我在单个文件中声明了以下类:
type
TCongruence = class(TObject)
private
a, b, n, numClass: integer;
solutions, vals: TSolutions;
hasSolutions: boolean;
function divides(a, b: integer): boolean;
function modulo(a, b: integer): integer;
public
constructor Create(a, b, n: integer); virtual;
function getSolutions: TSolutions; virtual;
function gcdExtended(p, q: integer): TSolutions;
class function getGCD(u, v: integer): integer;
property valA: integer read a;
property valB: integer read b;
property valN: integer read n;
property getClass: integer read numClass;
property hasSol: boolean read hasSolutions;
end;
type
TConguenceSystem = class(TCongruence)
private
system: …Run Code Online (Sandbox Code Playgroud) 除了这个问题,我还对docwiki进行了一些测试和研究.我的结论是这种代码应该没有内存泄漏:
function testResultObject: TClassA;
begin
Result := TClassA.Create;
Result.DoSomething;
end;
Run Code Online (Sandbox Code Playgroud)
然后我可以用这种方式调用上面的代码:
var k: TClassA;
begin
k := testResultObject;
try
//code code code
finally
k.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
正如雷米在答案中建议的那样,最好避免这种做事方式,而是使用类似的东西testResultObject(x: TClassA): boolean.在这种情况下,返回true/false可以告诉我一切是否正常并且我正在传递已经创建的对象.
看看这段代码:
function testResultObject: TClassA;
begin
Result := TClassA.Create;
try
Result.DoSomething;
except
Result.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
上面第一个版本的函数的问题是DoSomething可能引发异常,如果是这样,我会泄漏内存.第二个实现try-except可以解决吗?以后我必须检查结果是否已分配或为零.
我同意(如上所述)testResultObject(x: TClassA): boolean会更好.我只是想知道返回类功能的方式是否可以像我写的那样修复.
我已经读过,接口对于解码代码是一件好事,Nick Hodges已经写了很好的章节.读我已经生成了这段代码:
//interfaces
type
ILocalization = interface
['{1D144BCE-7D79-4672-8FB5-235422F712EE}']
function localize(const aWordId: string): string;
end;
type
IActions = interface
['{31E8B24F-0B17-41BC-A9E4-F93A8E7F6ECF}']
procedure addWord(const aIndex, aWord: string);
procedure removeWord(const aIndex: string);
end;
//implementation
type
TLocalization = class sealed (TInterfacedObject, ILocalization, IActions)
private
FTranslationList: TDictionary<string, string>;
public
constructor Create;
destructor Destroy; override;
//interface implementations
function localize(const aWordId: string): string;
procedure addWord(const aIndex, aWord: string);
procedure removeWord(const aIndex: string);
end;
Run Code Online (Sandbox Code Playgroud)
我打算用这个类本地化(翻译)我的delphi android应用程序.
当我要创建一个类的实例时,我会执行以下操作.
var
Italiano: TLocalization;
begin
Italiano := TLocalization.Create;
end;
Run Code Online (Sandbox Code Playgroud)
既然TLocalization应该继承AddRef并且Release I最终不会尝试这个,但即使Italiano是类类型而不是接口类型,这是否会发生? …
我正在编写自己的类来管理android/ios app的翻译,我已经制作了这段代码.我将解释下面的代码,但它非常容易和简短.
unit Localization;
interface
uses
System.Classes, System.SysUtils, Generics.Collections, Vcl.Dialogs;
//this class represents a single language (Italian, French, German...)
type
TLanguage = class
private
FTranslationList: TDictionary<string, string>;
function localize(const aWordId: string): string;
public
constructor Create;
destructor Destroy; override;
//methods
procedure addWord(const aIndex, aWord: string);
procedure removeWord(const aIndex: string);
end;
//this is a "container", it gathers all the languages in one place
type
TLocalization = class
private
FLanguagesList: TObjectList<TLanguage>;
FLocaleList: TStringList;
function getLang(Index: string): TLanguage;
public
constructor Create;
destructor Destroy; override; …Run Code Online (Sandbox Code Playgroud) 我想尝试创建一个firemonkey可视组件,我在网上看到了它TControl提供了基本需求.这是我到目前为止所做的:
TMyTest = class(TControl)
strict private
//code...
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
//code...
end;
Run Code Online (Sandbox Code Playgroud)
我查看了FMX组件的源代码,PlotGrid我已经复制了它的功能.我的班级来自TControl(如PlotGrid),它会覆盖Paint(如PlotGrid).看看代码:
constructor TMyTest.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
SetAcceptsControls(False);
end;
destructor TMyTest.Destroy;
begin
inherited;
end;
procedure TMyTest.Paint;
var
i: integer;
a, b: TPointF;
begin
Canvas.Fill.Color := TAlphaColorRec.White;
Canvas.Stroke.Color := TAlphaColorRec.Black;
Canvas.Stroke.Thickness := 2;
a.X := 0; a.Y := Height/2;
b.X := Width; b.Y := Height/2;
Canvas.DrawLine(a, b, 1);
end;
Run Code Online (Sandbox Code Playgroud)
鉴于这个代码,我希望有这样的东西(我已经编辑了绘制图像,它不是真正的图像)
问题是我得到了这个
组件很好,因为我看到所有的方法和属性,他们工作.该组件是功能但我在设计师看不到它!如果我运行FMX应用程序,我看不到颜色:
任何的想法?
我已经设置了事件Opacity := …