我有一个Base64二进制字符串,它是由第三方供应商发送给我们的XML文档的一部分,我希望能够将其保存回原始文件格式(jpg).
使用这个问题的接受答案"使用php将base64字符串保存为二进制文件"我可以毫不费力地将字符串保存到jpg,所以我知道字符串格式正确并且是JPG文件.
但是我如何在Delphi 2007中做到这一点?
在网上看到我发现了一个关于如何将Base64转换为TByteDynArray的教程,并保存它,但它不能正常工作.我也玩过Indy的IdDecoderMIME,但没有成功.
有没有人知道如何做到这一点,或者我应该在哪里看?
情况很简单.我创建了一个复杂的Delphi应用程序,它使用了几种不同的技术.主要应用程序是WIN32模块,但是一些部件是作为.NET程序集开发的.它还与Web服务通信或从特定网站检索数据.它将大部分用户数据保存在MS Access数据库中,并在注册表中包含一些其他设置.在内存中,所有数据都在XML文档中转换,有时在系统崩溃时将其作为备份保存到磁盘.(从而允许用户恢复他的数据.)XML文件中还有一些数据用于只读目的.该应用程序还执行其他应用程序,并希望完成.总而言之,这是一个非常复杂的应用程序.
尽管少数用户确实在Citrix服务器上使用此应用程序,但我们不支持使用此应用程序的Citrix.(基本上,它允许这些用户更具移动性.)但即使我们不断告诉他们我们不支持Citrix,这些客户也会试图帮助他们解决他们往往会遇到的一些偶然问题.
主要问题似乎是偶尔出现在Citrix系统上的随机异常.从不在同一个位置,通常它看起来与一些记忆问题有关.我们已经发布了很多错误报告,并且存在太多不同的错误.所以我知道解决所有那些复杂的问题.
所以我想更加通用,只想了解Delphi(2007)在Citrix系统上运行时可能遇到的问题.特别是当此应用程序不是以任何方式设计为Citrix感知时.我们不想正式支持Citrix,但如果我们可以帮助这些客户会很好.并不是说他们会付给我们更多,但仍然......
那么有谁知道Delphi应用程序可以在Citrix系统上遇到的一些常见问题?有没有人知道Citrix的常见问题?是否存在一些针对Citrix问题的Silver Bullet或Golden Hammer解决方案?
我在FastMM和FullDebugMode打开的情况下测试了我的应用程序,因为我遇到了一些关机问题.
在解决了我自己的问题之后,FastMM开始抱怨在TPopupList中对释放的对象调用虚方法.我试图在使用中尽早移动菜单单元,以便最后确定,但它没有帮助.这是真正的问题,来自FastMM的vcl或虚假警报中的错误?
以下是FastMM的完整报告:
FastMM has detected an attempt to call a virtual method on a freed object. An access violation will now be raised in order to abort the current operation.
Freed object class: TPopupList
Virtual method: Offset +16
Virtual method address: 4714E4
The allocation number was: 220
The object was allocated by thread 0x1CC0, and the stack trace (return addresses) at the time was:
403216 [sys\system.pas][System][System.@GetMem][2654]
404A4F [sys\system.pas][System][System.TObject.NewInstance][8807]
404E16 [sys\system.pas][System][System.@ClassCreate][9472]
404A84 [sys\system.pas][System][System.TObject.Create][8822]
7F2602 [Menus.pas][Menus][Menus.Menus][4223]
40570F [sys\system.pas][System][System.InitUnits][11397]
405777 [sys\system.pas][System][System.@StartExe][11462]
40844F …Run Code Online (Sandbox Code Playgroud) 您好
我正在使用Delphi 2007并将MainFormOnTaskBar属性设置为true.
我遇到的问题是这个.
如果从主窗体中打开子窗口,然后从刚刚打开的子窗口显示一个消息对话框.当您关闭消息对话框然后关闭子窗口时,主窗体将发送到您在屏幕上的任何其他应用程序的后面.
这种情况发生在Windows Vista和Windows 7下.有谁知道为什么会发生这种情况,我该如何解决?
我需要更改delphi表单控件的视觉样式,以便从.Net环境中显示它们.为此,我需要将delphi控件的颜色更改为蓝色($ 00FCF5EE).我已广泛使用"TButton"控件,它没有"颜色"属性.因此,我尝试了一种不同的方法,通过引入父表单并从该父表继承所有其他表单形成.在父表单中,我有一个类助手来更改按钮的颜色.这是代码:(我使用的是Delphi 2007)
TButtonHelper=class helper for TButton
private
procedure doChangeColor;
public
procedure DrawChangeColor;
end;
TParentForm = class(TForm)
public
procedure AfterConstruction; override;
end;
Run Code Online (Sandbox Code Playgroud)
在实施部分,我有
procedure TButtonHelper.doChangeColor;
var
SaveIndex: Integer;
FCanvas:TCanvas;
rect:TRect;
begin
if csDestroying in ComponentState then exit;
FCanvas:=TCanvas.Create;
SaveIndex := SaveDC(Self.Handle);
FCanvas.Lock;
try
FCanvas.Handle := Handle;
FCanvas.Font := Font;
FCanvas.Brush := self.Brush;
FCanvas.Brush.Color:=$00FCF5EE;
FCanvas.FillRect(BoundsRect);//Omitting the code to draw the text
finally
FCanvas.Handle := 0;
FCanvas.Unlock;
RestoreDC(handle, SaveIndex);
FCanvas.Free;
end;
end;
procedure TButtonHelper.DrawChangeColor;
begin
doChangeColor;
self.Repaint;
end;
procedure TParentForm.AfterConstruction;
var
i …Run Code Online (Sandbox Code Playgroud) 我正在以编程方式创建一个tChart(Delphi2007,TeeChar 7免费版).我想设置图表尺寸并可能更改宽高比,但我没有得到有意义的结果更改宽度和高度属性.我也尝试过改变轴TickLength而没有运气.我从dfm文件中复制了TChart的相关属性,而不是忘记任何有意义的东西.仅当我编辑X和Y max和min值时,图形的方面才会改变,但这还不够.
这是我的原始图表和"重新格式化"图表,因为您可以看到两者的图表尺寸均为400 x 250.是否有用于调整图表大小的特定属性?我希望轴相应调整大小,是否可能?谢谢您的帮助

以下是与TChart相关的代码:
procedure CreateChart(parentform: TForm);
//actually formatChart is a CreateChart anf fChart a member of my class
begin
fchart:= TChart.Create(parentform);
fchart.Parent:= parentform;
fchart.AxisVisible := true;
fchart.AutoSize := false;
fChart.color := clWhite;
fchart.BottomAxis.Automatic := true;
fchart.BottomAxis.AutomaticMaximum := true;
fchart.BottomAxis.AutomaticMinimum := true;
fchart.LeftAxis.Automatic := true;
fchart.LeftAxis.AutomaticMaximum := true;
fchart.LeftAxis.AutomaticMinimum := true;
fchart.view3D := false;
end
procedure formatChart(width, height, xmin, xmax, ymin, ymax: double);
//actually formatChart is a method anf fChart a member of my class
begin
with …Run Code Online (Sandbox Code Playgroud) 编译时不再弹出“正在编译”(请参见屏幕快照)对话框。消息正确显示在“ 消息”窗口中。我可以单击错误,并将其写入错误代码中。我正在使用Delphi 2007。
我可能会无意中设置了某个设置/选项吗?或者也许是一个ini文件设置来控制这个?我也尝试重新引导整个计算机,但问题仍然存在。
其他一切工作正常。但这使它成为一个非常困难的工作环境,因为编译器完成后我没有视觉状态。
注意:我知道“成功编译时自动关闭”复选框。我的问题/问题不在于编译后对话框关闭。它根本根本不会打开。

更新 @ZdravkoDanev表示编译器选项上有一个“显示编译器进度”开关。我已包含屏幕截图,但没有看到。

我想在标签中显示一个公式,如下所示:
| delta X | =(G - S + F)
其中上面的单词delta实际上应该是大写希腊字母delta(看起来像一个三角形).我尝试使用GnuGetText for Delphi来翻译它,但它出现了一个问号:
|?X | =(G - S + F)
由于Gorm(使用Delphi XE编写)正确显示字符串,我想一个unicode感知Delphi版本将是一个解决方案.不幸的是,我不能这样做因为这会破坏现有的代码.
另一个解决方案是如何避免这个问题的公式图片.
还有其他选择吗?
我有一个看起来像这样的JSON文件,我正在尝试对其进行解码,但是没有运气:
[
{
"FirstName": "Kim",
"Surname": "Jensen"
},
{
"FirstName": "Amery",
"Surname": "Mcmillan"
},
{
"FirstName": "Denton",
"Surname": "Burnett"
}
...
]
Run Code Online (Sandbox Code Playgroud)
将uJson与Delphi 2007结合使用,我知道当数组具有如下名称时如何提取数据:
{
"Names": [
{
"FirstName": "Kim",
"Surname": "Jensen"
},
{
"FirstName": "Amery",
"Surname": "Mcmillan"
},
{
"FirstName": "Denton",
"Surname": "Burnett"
}
...
]
}
Run Code Online (Sandbox Code Playgroud)
var
json: TJSONObject;
Text: String;
i: Integer;
begin
json := TJSONObject.create(jsontext);
for i:=0 to json.getJSONArray('Names').Length -1 do
begin
Text := json.getJSONArray('Names').getJSONObject(i).optString('FirstName');
...
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是,这个数组没有名字,我已经尝试了几乎所有我能想到的东西,但是这个简单的事情却花了我几个小时才能弄清楚。
我正在尝试从此答案中TImage说明的URL 加载开始。
uses
GIFImg;
procedure TForm1.Button1Click(Sender: TObject);
var
Stream : TMemoryStream;
GIF : TGIFImage;
begin
Stream := TMemoryStream.Create;
GIF := TGIFImage.Create;
try
IdHTTP1.Get('http://www.google.com/intl/en_ALL/images/logo.gif', Stream);
//IdHTTP1.Get('https://www.google.com/intl/en_ALL/images/logo.gif', Stream);
Stream.Position := 0;
GIF.LoadFromStream(Stream);
Image1.Picture.Assign(GIF);
finally
FreeAndNil(GIF);
FreeAndNil(Stream);
end;
end;
Run Code Online (Sandbox Code Playgroud)
如果URL以简单的HTTP开头,则一切正常。
当我尝试从HTTPS URL加载时,出现EIdIOHandlerPropInvalid异常消息:
IOHandler值无效。
我尝试添加一个TIdSSLIOHandlerSocketOpenSSL并将其设置IOHandler为TIdHTTP组件。
完成此操作后EIdOSSLCouldNotLoadSSLLibrary,出现以下消息异常:
无法加载SSL库。
属性是否存在问题或其他问题?
delphi ×10
delphi-2007 ×10
base64 ×1
citrix ×1
debugging ×1
fastmm ×1
indy ×1
json ×1
modal-dialog ×1
teechart ×1
ujson ×1
web-services ×1