小编Joh*_*ica的帖子

VCL.Bitmap到FMX.Bitmap

我在网上找到了这段代码,但FMX.Bitmap没有扫描线.有可能以某种方式将VCL.TBitmap复制或绘制到FMX.Bitmap吗?

{$IFDEF MSWINDOWS}
type
  TBitmap = FMX.Types.TBitmap;
  TVclBitmap = Vcl.Graphics.TBitmap;

procedure TakeScreenshot(Dest: FMX.Types.TBitmap);
var
  DC: HDC;
  Size: TPointF;
  VCLBitmap: TVclBitmap;
  Y: Integer;
begin
  VCLBitmap := nil;
  //Size := FMX.Platform.IFMXScreenService.GetScreenSize;
  DC := GetDC(0);
  try
    VCLBitmap := TVclBitmap.Create;
    VCLBitmap.PixelFormat := pf32bit;
    VCLBitmap.SetSize(Trunc(Size.X), Trunc(Size.Y));
    BitBlt(VCLBitmap.Canvas.Handle, 0, 0, VCLBitmap.Width, VCLBitmap.Height,
      DC, 0, 0, SRCCOPY);
    Dest.SetSize(VCLBitmap.Width, VCLBitmap.Height);
    { The format of a FMX bitmap and a 32 bit VCL bitmap is the same, so just
      copy the scanlines. - not true- FMX bitmap does not …
Run Code Online (Sandbox Code Playgroud)

delphi firemonkey delphi-xe4

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

iOS,如何禁用有关弃用方法的CERTAIN警告

我正在从iOS6迁移到iOS7,但我想保留适用于iOS6的代码,所以我的代码如下所示:

if (isiOS7orAbove) {
    sizeios7 = [text boundingRectWithSize:CGSizeMake(TEXTVIEW_WIDTH, 9999)
                options:NSStringDrawingUsesLineFragmentOrigin 
                attributes:nil context:nil];
}else{
    size = [text sizeWithFont:[self cellFont]
            constrainedToSize:CGSizeMake(TEXTVIEW_WIDTH, 9999)
            lineBreakMode:NSLineBreakByWordWrapping];
}
Run Code Online (Sandbox Code Playgroud)

但是Xcode一直警告我[text sizeWithFont...]不赞成.现在,因为我确信我的旗帜isiOS7orAbove可以处理iOS版本所以我不需要警告,因为我已经处理过它.

我不想真的禁用有关弃用方法的警告,我想要的是告诉Xcode我已经处理它,应该适用于较低版本的iOS.

那么有可能只删除[text sizeWithFont ...]的警告吗?

我想一个叫宏的东西应该这样做,#IF IOS6但我不确切知道如何.

macros warnings deprecated ios

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

当我在备忘录上打字时,如何计算字符和行数

我编写了以下代码来计算用户输入时的行数和字符数.但它有一个问题,它在用户输入第一个字符后开始计数,当他按下退格键时,它会增加计数器,然后开始减少它.

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  Text1.Text := 'Lines: ' + IntToStr (Memo1.Lines.Count);
  Text2.Text := 'Characters: ' + IntToStr (Length(Memo1.Text));
end;
Run Code Online (Sandbox Code Playgroud)

delphi firemonkey delphi-xe5

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

shell 变量中的问号 (?)

我想使用具有以下名称的变量:topMiddleOligocenetoUpperEocene?

我怎样才能在 shell 脚本中做到这一点(即使用问号)?我试过:

{topMiddleOligocenetoUpperEocene?}="something"
Run Code Online (Sandbox Code Playgroud)

但我的 shell 脚本中不理解它(myfile.sh 在第一行中使用 #!/bin/sh)。

任何提示将不胜感激,提前致谢。

string variables shell

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

从UnicodeString创建CData节点时XML无效字符

IDE:Embarcadero XE5 c ++构建器。

我试图在XML CData 节中转储UnicodeStrings

这样的字符串的小摘录:

 u"‰PNG\r\n\x1A\n\0\0\0\rIHDR\0\0\0õ\0\0\02\b\x06\0\0\0„\\i\0\0\0\x01sRGB\0®Î\x1Cé\0\0\0\x04gAMA\0\0±\vüa\x05\0\0\0\tpHYs\0\0\x0EÃ\0\0\x0EÃ\x01Ço¨d\0\0\v¼IDATxÚíœypUÕ\x19ÀO\x06…°¤\x04D$ˆ²\b1š\b\x18@...etc"
Run Code Online (Sandbox Code Playgroud)

我知道一个XML文档可以包含非ASCII字符,并且我认为XML解析器无法解析XML CData节的内容(节末尾指示符“ [[> ” 除外)不存在在我的数据中进行检查)。

创建(写入)CDATA节,我仍然得到“ 无效字符在文本内容创建节点时被发现的错误”。

代码示例:

_di_IXMLDocument pXMLDocument = NewXMLDocument("1.0");
// I've played around with the document encoding with no success, guessing it's only applicable while reading the document.
// pXMLDocument->SetEncoding(L"iso-8859-1"); 

String myString;   // Unicode, contains my data string.

// 1st param of CreateNode method is of type UnicodeString.
di_IXMLNode pCDataNode = pXMLDocument->CreateNode( myString, ntCData ); 
Run Code Online (Sandbox Code Playgroud)

有什么想法为什么会失败?编码有问题吗?

c++ xml c++builder

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

缺少.bpl文件

编译FireMonkey项目并在另一台PC上执行应用程序后,我遇到了一个错误 - "rtl190.bpl丢失".
所以我搜索谷歌,我找到了"解决方案",这对我不起作用.
它说我应该取消选中"Link with Dynamic RTL"和"Link with Delphi runtime ...".
确实在编译之后,可执行文件更大,但我仍然遇到完全相同的错误.
我必须手动将"rtl190.bpl"和"fmx190.bpl"复制到exe的目录才能使其正常工作.
我该如何解决这个问题?

delphi bpl firemonkey

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

为动态按钮创建新的btnClick过程

我在创建动态按钮的新过程时遇到问题.单击该按钮时,它应该将项目发送到RichEdit.

我已经宣布了我的所有对象和程序.

这是我的代码:

type
  TfrmSale = class(TForm)
    redOutput: TRichEdit;
    btnBuy: TButton;
    procedure btnBuyClick(Sender: TObject);
  private
    pnlSale : TPanel;
    edtQuantity : TEdit;
    rgpOptions : TRadioGroup;
    btnSelect : TButton;
    procedure btnSelectCick(Sender: TObject);
  public
    { Public declarations }
  end;

var
  frmSale: TfrmSale;

implementation

{$R *.dfm}

procedure TfrmSale.btnBuyClick(Sender: TObject);
begin
  pnlSale := TPanel.Create(frmSale);
  pnlSale.Parent := frmSale;
  pnlSale.Left := 10;
  pnlSale.Top := 10;
  pnlSale.Width := 350;
  pnlSale.Height := 250;
  pnlSale.Visible := True;

  edtQuantity := TEdit.Create(pnlSale);
  edtQuantity.Parent := pnlSale;
  edtQuantity.Left := 50;
  edtQuantity.Top := 60;
  edtQuantity.Width …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7

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

"复制"不会创建动态阵列的独立副本

参考http://docwiki.embarcadero.com/RADStudio/XE6/en/Structured_Types#Dynamic_Arrays上的在线文档.

很清楚地写道,要创建动态数组的独立副本,请使用Copy()函数.在该链接中找到的示例代码还说明了在复制之后,如果更改了一个数组,则它不会反映到另一个数组中,因为它们都是独立副本.但是,这对我不起作用.复制之后,如果我更改了一个数组,另一个数组会自动更改为接收相同的值,这意味着Copy()只执行X:= Y所做的操作.根据文档,"X:= Y"和"X:=复制(Y)" 相同.

这是我的代码:

type
  TTestArray = array of TMyType; //Note: TMyType is a class and not a record.

var
  X, Y, Z: TTestArray;

begin
  SetLength(X, 1); //create first array
  X[0].testString := 'Test Y';
  Y := copy(X);
  X[0].testString := 'Test Z'; //re-assign another value
  Z := copy(X);
  X[0].testString := 'Test X';
Run Code Online (Sandbox Code Playgroud)

此时,testString字段应包含不同的文本.所以,

X[0].testString should be 'Test X'
Y[0].testString should be 'Test Y'
Z[0].testString should be 'Test Z'
Run Code Online (Sandbox Code Playgroud)

但是,所有这三个都只有'Test X'作为testString中的值,因此暗示Copy()没有创建数组X的独立副本.相反,所有三个数组都指向相同的内存位置.

任何可靠地创建动态数组的独立副本的方法(即完成我上面尝试做的事情)?

注意(稍后添加): TMyType是一个类而不是记录.因此,根据下面非常有用的评论,这是CLASS情况下的预期行为.那么,在这种情况下,如何将X独立复制到Y和Z?

注2:从主题行中删除"Bug".对不起,Embarcadero ...... …

arrays delphi

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

如何使用泛型处理普通的动态数组?

我知道如何操纵像TList等派生的泛型类.

但是,当我想操纵一个普通的动态数组时,我遇到了困难.

如何将以下代码转换为使用泛型的版本?

//code A
function CloneArray(original: TArray_Of_TX): TArray_Of_TX;
var
  i: integer;
  copy: TX;
begin
  Result.SetLength(SizeOf(original));
  for i:= 0 to SizeOf(original) -1 do begin
    copy:= TX.Create;
    copy.assign(original[i]);
    Result[i]:= copy;
  end; {for i}
end;
Run Code Online (Sandbox Code Playgroud)

如果我使用TList,通用版本将是:

//code B (works, but not on a plain dynamic array)
uses
  System.SysUtils, system.classes, Generics.Collections;

type
  TMyList<T: TPersistent, constructor > = class(TList<T>)
  public
    function CloneArray: TMyList<T>;
  end;

implementation

function TMyList<T>.CloneArray: TMyList<T>;
var
  i: integer;
  temp: T;
begin
  Result:= TMyList<T>.Create;
  for i:= 0 to SizeOf(self) -1 do …
Run Code Online (Sandbox Code Playgroud)

delphi generics

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

批处理文件:for循环中的转义问号

这个for循环(减少最小的例子);

@echo off
for %%a in (help -help --help /help ? /?) do ( 
   echo %%a 
)
Run Code Online (Sandbox Code Playgroud)

用'?'扼杀2个元素 字符.它输出

C:\Temp>test.bat
help
-help
--help
/help

C:\Temp>
Run Code Online (Sandbox Code Playgroud)

所以当它击中第一个'?'时它就退出循环.

这个集合的正确转义序列是什么?尝试了一堆东西,双引号,插入符号,反斜杠等,但似乎没有任何作用.

windows escaping batch-file

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