全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1820
推到 Plurk!
推到 Facebook!

Delphi轉BCB的問題???

答題得分者是:deity
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-12-28 23:52:24 IP:122.118.xxx.xxx 訂閱
各位先進大大好:
可以麻煩各位大大能幫我把這Delphi語言轉為BCB,這是
前輩Deity寫的,我看看了很久也找了很多相開資訊,可以請
大大給我個提示或是幫我解答一下,小弟感謝你.
謝謝~

[code cpp]

FList:TStringlist;
Node:TTreeNode;

procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
FList:=TStringlist.create;
for I:=0 to TreeView1.items.count-1 do
begin
Node:=TreeView1.items[I];
Flist.addobject(Node.text,Node);
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=FList.indexof('你要搜寻的节点文本');
if i<>-1 then
begin
Node:=TTreeNode(FList.objects[i]);
FList.Delete(i);
end;
treeview1.selected:=Node;
TreeView1.SetFocus;
end;
請在此區域輸入程式碼

[/code]

------
努力往往是甘苦的!!一起勉勵
編輯記錄
nokib2002 重新編輯於 2010-12-28 08:53:23, 註解 無‧
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-12-29 10:05:29 IP:61.219.xxx.xxx 訂閱

[code cpp]
#include "ComCtrls.hpp"

TStringList *FList;
TTreeNode *Node;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int i;
FList = new TStringList();
for (i=0;iItems->Count;i )
{
Node=TreeView1->Items->Item[i];
FList->AddObject(Node->Text,Node);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
i=FList->IndexOf("bbb");
if (i!=-1)
{
Node=(TTreeNode*)FList->Objects[i];
FList->Delete(i);
}
TreeView1->Selected=Node;
TreeView1->SetFocus();
}
//---------------------------------------------------------------------------

[/code]
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-12-29 11:29:12 IP:59.120.xxx.xxx 訂閱
senso你好
我大致上看的懂,可是有個小小問題,就是在 i=FList->IndexOf("bbb");
上,意思是說i去參考暫存的FList這空間,那你打bbb的意思,是指我要參考的
Vcl嗎???那個bbb是什麼意思??deity前輩是寫"你要搜尋的文本"有看沒有懂
懇請賜教 謝謝
===================引 用 senso 文 章===================

[code cpp]
#include "ComCtrls.hpp"

TStringList *FList;
TTreeNode *Node;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
? int i;
? FList = new TStringList();
? for (i=0;iItems->Count;i )
? {
?Node=TreeView1->Items->Item[i];
?FList->AddObject(Node->Text,Node);
? }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
? int i;
? i=FList->IndexOf("bbb");
? if (i!=-1)
? {
?Node=(TTreeNode*)FList->Objects[i];
?FList->Delete(i);
? }
? TreeView1->Selected=Node;
? TreeView1->SetFocus();
}
//---------------------------------------------------------------------------

[/code]
------
努力往往是甘苦的!!一起勉勵
老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-12-29 11:37:05 IP:59.120.xxx.xxx 未訂閱
簡單的說
就是去TStringList中尋找有沒有bbb這個字串
有的話
就將bbb所屬的index取出到i之中


===================引 用 nokib2002 文 章===================
senso你好
我大致上看的懂,可是有個小小問題,就是在 i=FList->IndexOf("bbb");
上,意思是說i去參考暫存的FList這空間,那你打bbb的意思,是指我要參考的
Vcl嗎???那個bbb是什麼意思??deity前輩是寫"你要搜尋的文本"有看沒有懂
懇請賜教 謝謝
===================引 用 senso 文 章===================

[code cpp]
#include "ComCtrls.hpp"

TStringList *FList;
TTreeNode *Node;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
? int i;
? FList = new TStringList();
? for (i=0;iItems->Count;i )
? {
?Node=TreeView1->Items->Item[i];
?FList->AddObject(Node->Text,Node);
? }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
? int i;
? i=FList->IndexOf("bbb");
? if (i!=-1)
? {
?Node=(TTreeNode*)FList->Objects[i];
?FList->Delete(i);
? }
? TreeView1->Selected=Node;
? TreeView1->SetFocus();
}
//---------------------------------------------------------------------------

[/code]
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-12-29 11:58:47 IP:59.120.xxx.xxx 訂閱
各位大大你好:
我有按Button後,有暫存的功能,可是一直停在同一的動態node,例如下
我會一直停在第一個11,不會跑到2的11,我應該怎麼解決 謝謝!!

a
|_1
|__11
|_2
|__11
===================引 用 老大仔 文 章===================
簡單的說
就是去TStringList中尋找有沒有bbb這個字串
有的話
就將bbb所屬的index取出到i之中


===================引 用 nokib2002 文 章===================
senso你好
我大致上看的懂,可是有個小小問題,就是在 i=FList->IndexOf("bbb");
上,意思是說i去參考暫存的FList這空間,那你打bbb的意思,是指我要參考的
Vcl嗎???那個bbb是什麼意思??deity前輩是寫"你要搜尋的文本"有看沒有懂
懇請賜教 謝謝
===================引 用 senso 文 章===================

[code cpp]
#include "ComCtrls.hpp"

TStringList *FList;
TTreeNode *Node;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
? int i;
? FList = new TStringList();
? for (i=0;iItems->Count;i )
? {
?Node=TreeView1->Items->Item[i];
?FList->AddObject(Node->Text,Node);
? }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
? int i;
? i=FList->IndexOf("bbb");
? if (i!=-1)
? {
?Node=(TTreeNode*)FList->Objects[i];
?FList->Delete(i);
? }
? TreeView1->Selected=Node;
? TreeView1->SetFocus();
}
//---------------------------------------------------------------------------

[/code]
------
努力往往是甘苦的!!一起勉勵
編輯記錄
nokib2002 重新編輯於 2010-12-28 23:43:33, 註解 無‧
老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-12-29 16:00:25 IP:59.120.xxx.xxx 未訂閱
這種做法可能只適用在找單一的值所用的
(FList中是否有11這個值,不管有幾個)
相當於用POS找字串的意思
假如您要搜尋FList是否有其他的11
那麼請自行用回圈去判斷即可
for i := 0 to FList.Count-1 do
if ....

雖然是Delphi的語法
但是以上回文已經有Delphi轉BCB的範例 我對BCB也不熟
所以請自行修改~


PS:
其實您的問題講的有點簡略
會讓人不知您到底要的是什麼
是要找FList有沒有"11"??
還是要找TreeView有沒有"11"??
請把您的需求講清楚點
要不然大家幫忙您的時候可能會誤解您的意思

===================引 用 nokib2002 文 章===================
各位大大你好:
我有按Button後,有暫存的功能,可是一直停在同一的動態node,例如下
我會一直停在第一個11,不會跑到2的11,我應該怎麼解決 謝謝!!

a
|_1
|__11
|_2
|__11

nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-12-29 17:23:30 IP:59.120.xxx.xxx 訂閱
請教各位大大:
小弟要在動態TreeView中做一個Eite1及搜尋動態node的Button1,按Button1
時,會搜尋第一個相同的字串,可是我要搜尋第二個相同字串,所以我又新建Button2
就是當我按下Button2時,會搜尋下一個,再按Button2會再找下一個,如果沒有
的時候,就會跳出訊息說,已無資料搜索.....真的謝謝各位大大.


===================引 用 老大仔 文 章===================
這種做法可能只適用在找單一的值所用的
(FList中是否有11這個值,不管有幾個)
相當於用POS找字串的意思
假如您要搜尋FList是否有其他的11
那麼請自行用回圈去判斷即可
for i := 0 to FList.Count-1 do
? if ....

雖然是Delphi的語法
但是以上回文已經有Delphi轉BCB的範例 我對BCB也不熟
所以請自行修改~


PS:
其實您的問題講的有點簡略
會讓人不知您到底要的是什麼
是要找FList有沒有"11"??
還是要找TreeView有沒有"11"??
請把您的需求講清楚點
要不然大家幫忙您的時候可能會誤解您的意思

===================引 用 nokib2002 文 章===================
各位大大你好:
我有按Button後,有暫存的功能,可是一直停在同一的動態node,例如下
我會一直停在第一個11,不會跑到2的11,我應該怎麼解決 謝謝!!

a
|_1
|__11
|_2
|__11

------
努力往往是甘苦的!!一起勉勵
老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-12-29 17:41:13 IP:59.120.xxx.xxx 未訂閱
那這時候就看您要怎麼去實做了
可以從FList找
大至上的寫法我已在上個回文中回過了
假如是從TreeView中找的話
可以從您的程式中修改即可

TStringList *FList;
TTreeNode *Node;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int i;
FList = new TStringList();
for (i=0;iItems->Count;i )
{
Node=TreeView1->Items->Item[i];
if Node->Text = ??? then ...
}
}

我只是寫個大至上的寫法
因為BCB我不熟
所以我只能寫個大概、起個頭


===================引 用 nokib2002 文 章===================
請教各位大大:
小弟要在動態TreeView中做一個Eite1及搜尋動態node的Button1,按Button1
時,會搜尋第一個相同的字串,可是我要搜尋第二個相同字串,所以我又新建Button2
就是當我按下Button2時,會搜尋下一個,再按Button2會再找下一個,如果沒有
的時候,就會跳出訊息說,已無資料搜索.....真的謝謝各位大大.



deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-12-29 23:47:45 IP:59.32.xxx.xxx 未訂閱
a
|_1
|__11
|_2
|__11

这几天没空,不好意思。
之前给出的代码能够实现连续按Button,查找出2个11的,已做成了BCB实例如下:
http://delphi.ktop.com.tw/download.php?download=upload/4d1b57756e2ad_foryou.rar
另:senso前辈转换是没错的。



編輯記錄
deity 重新編輯於 2010-12-29 08:51:22, 註解 無‧
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2010-12-30 12:32:06 IP:59.120.xxx.xxx 訂閱
謝謝各位大大的幫助
小弟編譯完後,還是會一直停在同一個字串,不會搜尋到下一個
對了,小弟的Edit1是屬於部分搜尋treeview1的node,例如
a
|__777
|___5555
|__88
|___7777
|__11
|___7777777

小弟在Edit1 中輸入7按button1搜尋會找到a->777,在按button2搜尋下一個
會找到88->7777,以此類推,~謝謝~ 有這個網站真好^^

------
努力往往是甘苦的!!一起勉勵
編輯記錄
nokib2002 重新編輯於 2010-12-29 21:33:37, 註解 無‧
nokib2002 重新編輯於 2010-12-29 21:37:42, 註解 無‧
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2010-12-30 14:35:46 IP:183.55.xxx.xxx 未訂閱
你有没有单独试试我发上来的程序呢,我是连续按一个Button对同一个关键字进行查找。

不过你的需求有点奇怪,干嘛要分开几个Button对同一个关键字进行查找呢?

你将button1事件里面的内容写在其他Button上就行了。

将i设为全局变量


int i;
TStringList *FList;
TTreeNode *Node;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int j; //重新定义一个局部变量j
FList = new TStringList();
for (j=0;jItems->Count;j )
{
Node=TreeView1->Items->Item[j];
FList->AddObject(Node->Text,Node);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

i=FList->IndexOf("bbb");
if (i!=-1)
{
Node=(TTreeNode*)FList->Objects[i];
FList->Delete(i);
TreeView1->Selected=Node;
TreeView1->SetFocus();
}
}
//---------------------------------------------------------------------------
//以此类推,button2,button3如果都是对同一个关键字查找,写入相同的代码就行
void __fastcall TForm1::Button2Click(TObject *Sender)
{

i=FList->IndexOf("bbb");
if (i!=-1)
{
Node=(TTreeNode*)FList->Objects[i];
FList->Delete(i);
TreeView1->Selected=Node;
TreeView1->SetFocus();
}
}

问题没解决,先急于结案。
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2010-12-30 18:09:34 IP:61.219.xxx.xxx 訂閱
最一開始的code就可以下一個吧
不過要部份搜尋的話還是要跑回圈...
參考看看

[code cpp]
//已選取node則取得下個node,否則取得第一個node
TTreeNode *tmpNode = (TreeView1->Selected)?TreeView1->Selected->GetNext():TreeView1->Items->GetFirstNode();
while (tmpNode)
{
if (tmpNode->Text.Pos(Edit1->Text)) //有找到字串起始位置 return>0
{
tmpNode->Selected=true; //設定此node選取
TreeView1->SetFocus();
break;
}
else tmpNode = tmpNode->GetNext(); //找下一個,若無則NULL離開while
}
if (!tmpNode) ShowMessage("已無資料搜索");

[/code]

nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#13 引用回覆 回覆 發表時間:2010-12-31 08:37:41 IP:59.120.xxx.xxx 訂閱
謝謝各位前輩的回答:
小弟已經解決了這個問題,很謝謝前輩一同討論問題
學到了真多,感覺大家都不會吝嗇的解決我的問題點,
在此謝謝各位,小弟下台一鞠躬,(也再次謝謝版主,提供
這資訊的平台)
------
努力往往是甘苦的!!一起勉勵
系統時間:2017-10-23 6:32:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!