willchen
初階會員
發表:64 回覆:81 積分:29 註冊:2003-05-23
發送簡訊給我
|
真是抱歉,這個小問題還得麻煩各位高手。
問題是這樣的,我想要用StatusBar的變化來控制Socket,比如,程式在執行的狀態下,StatusBar會顯示程式執行中,當程式執行完畢時,StatusBar會顯示程式執行完畢,此時,我希望StatusBar文字的改變的事件觸發,來關閉Socket,
請問各位高手,這樣要怎麼寫,我看了help老半天只知道怎麼設StatusBar的文字,但沒看到StatusBar的改變的Event,不知道要怎麼寫。
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
willchen您好: 引言:
問題是這樣的,我想要用StatusBar的變化來控制Socket,比如,程式在執行的狀態下,StatusBar會顯示程式執行中,當程式執行完畢時,StatusBar會顯示程式執行完畢,此時,我希望StatusBar文字的改變的事件觸發,來關閉Socket,
我不是高手,不好意思,何不在[程式執行完畢]的時候關閉 >
< class="code">
您的需求 : [程式執行完畢]→[StatusBar文字的改變]→[關閉Socket]
建議 : [程式執行完畢]→[關閉Socket]
→[StatusBar文字的改變]
順心 發表人 -
|
ENIX007
高階會員
發表:28 回覆:274 積分:185 註冊:2003-11-27
發送簡訊給我
|
willchen您好:
看到您的問題,禁不住產生一個疑問:
StatusBar的確是沒有OnChange事件,然而您的需求是要在 StatusBar文字的改變
來關閉Socket,而"StatusBar的文字改變"這個動作不是由您程式控制的嗎?
那在改變StatusBar文字時順便關閉Socket...
對不起,反問您這個問題,我是不是會錯意了 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------ 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
|
willchen
初階會員
發表:64 回覆:81 積分:29 註冊:2003-05-23
發送簡訊給我
|
因為我的程式一個Form裡面有個副程式跑,但我要等副程式跑完得到結果然後Socket傳送結果回去,這樣的話,我的程式就不能在副程式關Socket,有其他比較好的方式嗎??我把程式post上去好了,這樣比較好解決一點。
請各位高手多多指教,由於我需要此Form的顯示結果,我沒辦法把Socket關掉的程式寫在此Form的OnClose事件下。那要怎麼解決的好??
//--------------------------------------------------------------------------- #include
#pragma hdrstop #include "Unit1.h"
#include "Masks.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "LbAsym"
#pragma link "LbCipher"
#pragma link "LbClass"
#pragma link "LbRSA"
#pragma resource "*.dfm"
TForm1 *Form1;
int FileNumber=0;
AnsiString CurrentDir;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//Load key
ServerletRSA->PrivateKey->LoadFromFile(ExtractFilePath(Application->ExeName) "privatekey");
//Load加密result結果的key
ServerletRSA->PublicKey->LoadFromFile(ExtractFilePath(Application->ExeName) "publickey"); CurrentDir=GetCurrentDir() "\\"; //Set CurrentDir SE2MMClient->Port=7777;
SE2MMClient->Address="127.0.0.1";
}
//--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender)
{
SE2MMClient->Open();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SE2MMClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
Edit1->Text=""; //Debug
SearchFiles("C:\\","*.txt");
Edit1->Text=IntToStr(FileNumber);
//Edit2->Text=ServerletRSA->DecryptString(Edit1->Text); //Debug
AnsiString encrypted_result=ServerletRSA->EncryptString(IntToStr(FileNumber));
::Sleep(10);
Socket->SendText(encrypted_result);
::Sleep(10);
//SE2MMClient->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SearchFiles(AnsiString Dir,AnsiString File)
{
TSearchRec SearchRec;
int iAttr=faAnyFile;
int FileFound=0;
if(!DirectoryExists(Dir))
{
return;
}
if(Dir.SubString(Dir.Length(),1)!="\\")
{
Dir=Dir "\\";
}
Application->ProcessMessages();
FileFound=FindFirst(Dir "*.*",iAttr,SearchRec);
while(FileFound==0)
{
if(SearchRec.Attr==faDirectory)
{
if((SearchRec.Name!=".")&&(SearchRec.Name!=".."))
{
SearchFiles(Dir SearchRec.Name,File);
}
}
else
{
if(MatchesMask(SearchRec.Name,File))
{
Memo1->Lines->Add(Dir SearchRec.Name);
FileNumber ;
}
}
FileFound=FindNext(SearchRec);
}
FindClose(SearchRec);
}
//---------------------------------------------------------------------------
|
aquarius
資深會員
發表:3 回覆:347 積分:330 註冊:2003-05-21
發送簡訊給我
|
在 TStatusBar 的 OnDrawPanel 中可以比對字串是否有改變, 若改變就可以去執行對應的程式. ...Aquarius
------ 水瓶男的blog: http://791909.blogspot.com
|
ENIX007
高階會員
發表:28 回覆:274 積分:185 註冊:2003-11-27
發送簡訊給我
|
willchen您好
小弟還是不太了解您的問題所在
如同您程式碼中 > 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------ 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
|
willchen
初階會員
發表:64 回覆:81 積分:29 註冊:2003-05-23
發送簡訊給我
|
真是謝謝各位高手的解答,我最後解決了這問題了,雖然不是利用各位高手所講的方法,但還是謝謝各位高手的意見,希望下次有機會可以不吝指教。
|