Delphi编程技巧总汇--------[持续更新]

s11ss 2014-02-06 01:23:59
加精
眼瞅马年伊始,Delphi版块门可罗雀,新贴寥寥无几,鄙人又闲来无事,故发此贴来攒点人气!
鄙人才疏学浅,难免会有不严谨甚至错误之处,还望各路英豪海涵并指正!也欢迎各位贤良之才高谈阔论,发表高见!闲言少叙,鄙人就一马当先,抛砖引玉了:

加入一句{$R WindowsXP},控件具有系统主题风格。



ps:
鄙人近日为生计所困,虽不至于衣不蔽体、穷困潦倒,但也算是菲食薄衣了,哪位爱心人士心怀慈悲,见鄙人还有点用,让鄙人有偿改个bug或做个模块啥的,鄙人定当竭尽所能、全力以赴、感激涕零!BTW, 版主大人大人有大量,别把帖给删了,别烧了我的救命稻草!
...全文
17643 211 打赏 收藏 转发到动态 举报
写回复
用AI写文章
211 条回复
切换为时间正序
请发表友善的回复…
发表回复
s11ss 2016-09-12
  • 打赏
  • 举报
回复
直接用Result当循环变量:
function TStrings.IndexOf(const S: string): Integer;
begin
  for Result := 0 to GetCount - 1 do
    if CompareStrings(Get(Result), S) = 0 then Exit;
  Result := -1;
end;
卷壳鹦鹉螺 2016-08-12
  • 打赏
  • 举报
回复
以前从来没在这里发过贴,现在给楼主顶一下吧。
qq_32953509 2016-08-11
  • 打赏
  • 举报
回复
鄙人新人!请教如何才能入门。。
qqq4246995 2016-08-09
  • 打赏
  • 举报
回复
爱好者支持一下,学习了!
acridin 2016-07-28
  • 打赏
  • 举报
回复
感觉自己好孤陋寡闻
hanlinsuile 2016-05-11
  • 打赏
  • 举报
回复
楼主,请帮忙看下。 function TfrmProjCompletedScore.AllOverTreeList( node: TcxTreeListNode): TcxTreeListNode; var BNode: TcxTreeListNode; begin while node<>nil do begin if node.HasChildren then begin node := node.getFirstChild; AllOverTreeList(node); if node.Parent <> nil then node := node.Parent; end else begin if ((Node.Values[tlWBSProjectName.ItemIndex] = NULL) or (Node.Values[tlWBSProjectName.ItemIndex] = '')) then begin BNode := node.Parent; node.Delete; node := BNode; AllOverTreeList(node); end; end; if node.getNextSibling <> nil then node := node.getNextSibling else Exit; end; end; procedure TfrmProjCompletedScore.cxButton1Click(Sender: TObject); var ANode : TcxTreeListNode; begin inherited; with tlWBS.DataController.DataSource.DataSet do try tlWBS.BeginUpdate; DisableControls; // Anode := tlWBS.FocusedNode; Anode := tlWBS.TopNode; AllOverTreeList(ANode); finally tlWBS.EndUpdate; EnableControls; end; end; 这样遍历删除,出现stack overflow,该如何解决呢?。
ttbook001 2016-04-29
  • 打赏
  • 举报
回复
xiaocongzhi 2016-04-27
  • 打赏
  • 举报
回复
Hannibal 2016-04-26
  • 打赏
  • 举报
回复
新人,先支持下,收藏了慢慢消化。
cwarr 2016-04-23
  • 打赏
  • 举报
回复
新人啊,好多看不懂,能不能发些实现某结果的帖子啊?比如,第一个帖子,很明确要达到什么目的,其他很多就不明白了。。。
qq_34625643 2016-04-11
  • 打赏
  • 举报
回复
我也来一个不是技巧,无技术含量的. 假如定义了 TTestObject = class(TInterfacedObject, IA) 类,当我们想用Supports检测是否支持IA接口时,那么会导致TestObject被释放,例如像下面的代码


  IA = interface
    ['{1B989234-AA9B-4EB3-B8D0-82596979EC7C}']
    procedure Say;
  end;

  TTestObject = class(TInterfacedObject, IA)
  public
    procedure Say;
  end;


procedure TForm1.Button1Click(Sender: TObject);
var
  TestObject: TTestObject;
  A: IA;
begin
  TestObject := TTestObject.Create;
  //A := TestObject as IA;
  //A<>nil then
  //  A.Say;
  if Supports(TestObject, IA, A) then
    A.Say;
end;
这样的代码会导致TestObjec被自动 释放。 假如TestObject 是在其它地方创建的,就会导致出现问题。 下面代码是我改造后的代码

  IA = interface
    ['{1B989234-AA9B-4EB3-B8D0-82596979EC7C}']
    procedure Say;
  end;

  TTestObject = class(TInterfacedObject, IA)
  private
    FAIntf: IA;   //主要是为了增加计数
  public
    constructor Create;
    destructor Destroy; override;
    procedure Say;
    procedure FreeEx;  //新加的释放方法 
  end;


procedure TForm1.Button1Click(Sender: TObject);
var
  TestObject: TTestObject;
  A: IA;
begin
  TestObject := TTestObject.Create;
  A := TestObject as IA;
  A.Say;
  TestObject.FreeEx;
end;

constructor TTestObject.Create;
begin
  inherited Create;
  FAIntf := Self;  //增加一行代码
end;

destructor TTestObject.Destroy;
begin
  ShowMessage('TTestobject.Destroy');
  inherited;
end;

procedure TTestObject.FreeEx;
begin
  FAIntf := nil;
end;

procedure TTestObject.Say;
begin
  ShowMessage('test');
end;
这样就避免从TComponent继承了。
NetG 2016-04-11
  • 打赏
  • 举报
回复
继续更新啊,楼主
jjpweb 2016-04-11
  • 打赏
  • 举报
回复
这一定要Mark一下
qq_28931259 2016-04-08
  • 打赏
  • 举报
回复
学习了
Playmaster 2016-04-08
  • 打赏
  • 举报
回复
确实受益匪浅~~,特有钻研精神的人才能注意到这些。
Sean丶quan 2016-04-05
  • 打赏
  • 举报
回复
受益匪浅~~
qq_33817577 2016-02-19
  • 打赏
  • 举报
回复
引用 67 楼 s11ss 的回复:
以前刚学c语言的时候,看到交换I,J的值,是通过一个临时变量。虽然当时学的时候明白了,但在实践中很容易弄糊涂。如果用两个临时变量,会不会交换得更自然点: var I,J,I2,J2: Integer; begin I2 := I; J2 := J; I := J2; J := I2 end;
还可以不用临时变量:

var
 I,J:Integer;
begin
  I := I xor J;
  J := I xor J;
  I := I xor J;
end;
苏生米沿 2016-01-10
  • 打赏
  • 举报
回复
顶顶顶。。。delphi现在还这么多人使用啊
叔叔不骗你 2016-01-08
  • 打赏
  • 举报
回复
还有多少做delphi 的?
qq_17732857 2016-01-01
  • 打赏
  • 举报
回复
大神怎么能迫于生计,想赚钱,加我微信331906526
加载更多回复(182)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧