小编Jon*_*den的帖子

在Delphi中进行非闪烁,分段图形更新的最佳方法是什么?

我想我可以把它扔到那里然后问:我已经看到Delphi控件在图形效果方面完美无缺.含义:没有闪烁,分段更新(仅重绘标记为脏的控件部分)和平滑滚动.

我已经编写了很多多年来图形控制的,所以我知道双缓冲,DIBS,bitblts和所有的"共同"的东西(我一直使用的DIB如果可能的话绘制的一切,但有一个开销).还要了解InvalidateRect并检查需要更新的实际rect的TCanvas.ClipRect.尽管有这些典型的解决方案,但我发现创建与Developer Express或Razed Components相同质量的组件非常困难.如果图形是平滑的,你可以打赌滚动条(本机)闪烁,如果滚动条和框架是平滑的,你可以在滚动期间发誓背景闪烁.

是否有标准的代码设置来处理这个问题?一种确保平滑重绘整个控件的最佳实践 - 包括控件的非客户区域?

例如,这是一个"裸骨"控件,它为分段更新占用高度(仅重绘所需的内容).如果在表单上创建它,请尝试在其上移动一个窗口,然后观察它用颜色替换部件(请参阅绘制方法).

有没有人有类似的基类可以处理非客户区重绘而不闪烁?

type

TMyControl = Class(TCustomControl)
private
  (* TWinControl: Erase background prior to client-area paint *)
  procedure WMEraseBkgnd(var Message: TWmEraseBkgnd);message WM_ERASEBKGND;
Protected
  (* TCustomControl: Overrides client-area paint mechanism *)
  Procedure Paint;Override;

  (* TWinControl: Adjust Win32 parameters for CreateWindow *)
  procedure CreateParams(var Params: TCreateParams);override;
public
  Constructor Create(AOwner:TComponent);override;
End;


{ TMyControl }

Constructor TMyControl.Create(AOwner:TComponent);
Begin
  inherited Create(Aowner);
  ControlStyle:=ControlStyle - [csOpaque];
end;

procedure TMyControl.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);

  (* When a window has this style …
Run Code Online (Sandbox Code Playgroud)

delphi graphics winapi

45
推荐指数
4
解决办法
1万
查看次数

Firemonkey的SynEdit?

是否有一个synedit包与firemonkey(或在其上工作的人)一起工作?

从我可以收集到的是之前有一个VGScene端口(参见:这个网站),但似乎已被删除.

另见本网站:

delphi synedit firemonkey

39
推荐指数
1
解决办法
2657
查看次数

从shell/dos应用程序获取输出到Delphi应用程序

我有一个在delphi中编码的命令行应用程序,我需要从普通的桌面应用程序(也用delphi编写)调用.简而言之,我想调用命令行应用程序并在列表框中显示它"实时"输出的文本.

自从我使用shell以来已经很久了,但我清楚地记得,为了从命令行应用程序中获取文本 - 我必须使用管道符号">".像这样:

C:/mycmdapp.exe> c:/result.txt

这将打印到shell的任何文本(使用writeLn)并将其转储到名为"result.txt"的文本文件中.

但是......(这里有泡菜),我想要一个实时结果而不是一个积压文件.一个典型的例子是Delphi编译器本身 - 它设法向IDE报告发生了什么.如果我的记忆正确地为我服务,我似乎记得我必须创建一个"管道"通道(?),然后将管道名称分配给shell调用.

我试图谷歌这个但我老实说不确定如何制定它.希望社区中的某些人能指出我正确的方向.

更新:此问题可能与如何在Delphi中运行命令行程序相同.虽然标题和问题本身并不相同,但有些答案符合我的要求.

delphi pipe shellexecute windows-shell

34
推荐指数
2
解决办法
4万
查看次数

Monotouch和XCode 4,网点在哪里?

今天我用最新版本的MonoDevelop,MonoTouch和Mono-Framework更新了我的mac.我还下载了最新版本的XCode,版本4(一个漂亮的4.5 gig下载).

起初我没有注意到它,因为我忙于将代码复制到我的项目中以便重复使用.但是,当实际添加一些控件,动作和出口到MainWindow文件的时候 - 我意识到缺少了一些东西.

希望我有点过分了,因为我找不到添加插座和动作的功能了吗?在谷歌搜索问题之后,我意识到新的XCode现在通过代码完成这些工作 - 但不是在C#中,它只是一个Objective C的东西.

我究竟如何解决这个问题?我目前正在下载XCode 3.2.6,但肯定有更好的选择吗?(我甚至不知道这是否会安装在4.x版本上)我究竟如何通过代码定义动作和出口?是否有任何教程可以缩短所需的额外时间?

欢迎任何帮助

更新:需要删除XCode并从头开始的人的提示.打开终端窗口并键入:

"sudo /Developer/Library/uninstall-devtools --mode=all"
Run Code Online (Sandbox Code Playgroud)

这将删除您当前的XCode安装(全部).请记住以后重新启动Mac.然后,您可以安装旧版本的XCode.

c# monodevelop xamarin.ios

9
推荐指数
1
解决办法
2483
查看次数

原型或内联,有什么区别?

我只是在学习Javascript,我很想知道,正在使用原型声明,如下所示:

function TSomeObj()
{
  this.name="my object";
}

TSomeObj.prototype.showname = function() {
  alert(this.name);
}
Run Code Online (Sandbox Code Playgroud)

基本上像这样做:

function TSomeObj()
{
  this.name="my object";
  this.showname = function() {
    alert(this.name);
  }
}
Run Code Online (Sandbox Code Playgroud)

当我转储对象的属性时,我得到相同的结果:

TSomeObj (inline version) =
{ 
    'name': 'my object',
    'test': function
}

TSomeObj (prototype declaration) =
{ 
    'name': 'my object',
    'test': function
}
Run Code Online (Sandbox Code Playgroud)

使用原型声明的好处是什么?除了更少的混乱和更有序的源代码或许.

更新:我或许应该使人们更清楚,这是最终的结果,我很好奇.最终结果是相同的(即在对象原型中都注册了一个新函数) - 但是他们这样做的方式却截然不同.感谢您的所有回复和信息!

javascript

9
推荐指数
2
解决办法
2212
查看次数

background-canvas与普通画布的性能

前段时间webkit(以及Safari)开始支持元素的CSS画布背景(来源:http://www.webkit.org/blog/176/css-canvas-drawing/).

这可以大大简化游戏和多媒体的创建,因为你不需要将画布标签注入DIV(例如),而只需直接挂入DIV的背景.也许这样的东西:

<div id="gameview"
style="background: -webkit-canvas(myscreen); width: 320px; height: 480px;">
</div>

<script>
    var target = document.getElementById("gameview");
    var wd = target.clientWidth;
    var hd = target.clientHeight;
    var context =  document.getCSSCanvasContext("2d", "myscreen", wd, hd);
    /* draw stuff here */
</script>
Run Code Online (Sandbox Code Playgroud)

我在想,这有什么速度惩罚吗?从理论上讲,我认为绘制背景画布应该比绘制画布标签更快,特别是如果目标元素为空.

有没有人为高速演示或游戏测试过这个?

javascript safari webkit canvas

9
推荐指数
1
解决办法
885
查看次数

iOS 5.1和Safari Mobile限制

似乎Apple(再次)通过iOS 5.1更新增加了Safari Mobile和javascript HTML5开发的限制.然而,由于八卦的程度,找到有关这些变化的事实令人沮丧.

有人说只有localstorage对象被移动到缓存中,而globalstorage和sessionstorage像以前一样工作(因为较大的站点使用这些,如facebook,通过合作伙伴网站登录).

有些人还说数据库仍然是持久性的,而另一些人则说这些数据库现在也存储在浏览器的缓存中 - 因此只要iOS感觉它就会被刷新.

有人可以用事实来启发我们吗?如果可能,最好使用源参考.

javascript html5 mobile-safari ios

9
推荐指数
1
解决办法
579
查看次数

XML数据绑定向导替代方案

Delphi数据绑定向导似乎遇到了复杂XSD文件的问题.每当几个XSD文件相互引用时(使用我相信的@include关键字),名称空间的前缀就会消失.这使得无法将Delphi XML数据绑定向导与大型复杂模式一起使用.在我的例子中,挪威政府使用的标准消息结构.

是否有标记的替代xml数据绑定向导?目前,我必须通过不太可取的代码生成XML.使用自动化向导的重点是节省时间并能够更快地适应标准的变化.

有关该问题的更深入介绍,请参阅以下文章:Delphi XML Databinding的难点

xml delphi xsd

9
推荐指数
1
解决办法
1217
查看次数

什么是最新的SynEdit版本或克隆?

我没有使用synEdit一段时间,但今天我发现我需要一个好的编辑器来支持脚本.当我去下载synEdit(我的思想已经及时冻结为"确定的事情")时,我发现原作者已经放弃了它.我知道FreePascal有一个synEdit版本 - 我听说有一个更近期的unicode版本"某处" - 但我在哪里可以获得最新和最好的版本?

如果可能的话,我更喜欢unicode支持,但更重要的是支持动态样式(能够添加令牌以强调下划线关键字,有点像Delphi在你访问你刚输入的类的变量时所做的那样).

delphi synedit

7
推荐指数
2
解决办法
3563
查看次数

在Delphi 64bit下,const参数和类型转换是否会像以前一样工作?

作为一般规则,我通过利用Const(无类型)参数而不是硬编码类型来使用指针时绕过了许多经典设计陷阱.这使我在执行高级图形功能时具有速度优势,同时将技术细节留给编译器.它还使得在Delphi和Free Pascal中使用相同的代码变得容易,只需要进行很少的更改.但是,由于Embarcadero关于Delphi演变的vauge声明以及它的upcomming安全模型,我已经开始质疑这一点.

例如,concider以下示例:

Type TSomeDataProc = procedure (const aInput;var aOutput) of Object;

(* Convert 8-bit pixel to 16-bit pixel *)
Procedure TMyClass.ProcessSomeData08x565(Const aInput;var aOutput);
var r,g,b: Byte;
Begin
  FPalette.ExportTriplets(Byte(aInput),r,g,b);
  Word(aOutput):=(R SHR 3) SHL 11 or (G SHR 2) SHL 5 or (B SHR 3);
End;

(* Convert 16-bit pixel to 24-bit pixel *)
Procedure TMyClass.ProcessSomeData565x888(Const aInput;var aOutput);
Begin
  With TRGBTriple(aOutput) do
  Begin
   rgbtRed:=(((word(aInput) and $F800) shr 11) shl 3);
   rgbtGreen:= (((word(aInput) and $07E0) shr 5) shl 2);
   rgbtBlue:= ((word(aInput) and …
Run Code Online (Sandbox Code Playgroud)

delphi 64-bit freepascal

7
推荐指数
1
解决办法
600
查看次数