View Full Version : خروج از یک Procedure ؟!!
www2006
سه شنبه 28 شهریور 1385, 17:48 عصر
با سلام
میخواستم ببینم که شما وقتی میخواهید از یک پروسیجر خارج شوید از چه دستوری استفاده میکنید ... ؟
توضیح : من در یک پروسیجر ، در یک شرط if از دستور Exit استفاده کرده ام ولی با اجرای آن شرط از کل پروسیجر خارج نمیشود و قسمت آخر آن Procedure ( آخرین بلاک ) اجرا میشود .. به نظر شما مشکل از کجاست ؟
با تشکر ...
رها
سه شنبه 28 شهریور 1385, 18:45 عصر
سلام.
منظورتون از بلاک چیه؟ من کد زیر رو برای رویداد کلیک یک Button نوشتم و همونجور که انتظار داشتم دستور ShowMessage اجرا نشد.
procedure TForm1.Button1Click(Sender: TObject);
begin
if (1=1)then exit;
ShowMessage('salam');
end;
Mahyaa
سه شنبه 28 شهریور 1385, 19:50 عصر
از try و finally استفاده کردید؟
اگر اینطور باشه , دستورات داخل Finally اجرا میشه .
www2006
چهارشنبه 29 شهریور 1385, 12:33 عصر
من کد زیر رو برای رویداد کلیک یک Button نوشتم و همونجور که انتظار داشتم دستور ShowMessage اجرا نشد.
procedure TForm1.Button1Click(Sender: TObject);
begin
if (1=1)then exit;
ShowMessage('salam');
end;
حرف شما درسته ... من هم همین انتظارو دارم ولی در برنامه ی من جور دیگه ای عمل کرده ( البته دارم بررسی میکنم بفهمم مشکل کار کجاست چون احتمالا کد من مشکل داره )
از try و finally استفاده کردید؟
اگر اینطور باشه , دستورات داخل Finally اجرا میشه .
تشکر از راهنماییت ولی در مورد مشکل پیش آمده این دستور کارگشا نیست .
بجز دستور Exit راه دیگه ای برای خارج شدن از Procedure هست یا نه ؟
Mahyaa
چهارشنبه 29 شهریور 1385, 12:45 عصر
تشکر از راهنماییت ولی در مورد مشکل پیش آمده این دستور کارگشا نیست .
کدوم دستور کارگشا نیست ؟!!؟
من نگفتم که از try و finally استفاده کنید .
گفتم اگر از این بلاک یا چیزی مشابهش استفاده کرده باشید ، باعث میشه با Exit نتونید بلافاصله از Procedure خارج بشید .
saeed_d
چهارشنبه 29 شهریور 1385, 14:24 عصر
سلام
اگه کد پراسیجرتون رو اینجا بزارید دوستان بهتر میتونن راهنمائیتون کنند.
amin a.^2
چهارشنبه 29 شهریور 1385, 14:37 عصر
کدوم دستور کارگشا نیست ؟!!؟
من نگفتم که از try و finally استفاده کنید .
گفتم اگر از این بلاک یا چیزی مشابهش استفاده کرده باشید ، باعث میشه با Exit نتونید بلافاصله از Procedure خارج بشید .
منم با مهیا جان موافقم این روش بهترینه شاید با این روش به طور کلی مشکل حل نشه ولی حد اقل می فهمید مشکل از کدام مرحله ی انجام کار
www2006
چهارشنبه 29 شهریور 1385, 14:53 عصر
کدوم دستور کارگشا نیست ؟!!؟
من نگفتم که از try و finally استفاده کنید .
گفتم اگر از این بلاک یا چیزی مشابهش استفاده کرده باشید ، باعث میشه با Exit نتونید بلافاصله از Procedure خارج بشید .
.. من منظور شما رو بد متوجه شدم ...
اینم کد پروسیجر :
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
i : integer ;
tst : string ;
NickName : string ;
ClientMessage : string ;
recieveStreamPic : TFileStream ; // its a file for client screenshot
strSize : integer ; // size of stream of client screenshot
JpgImage : TJPEGImage ;
begin
myThread := AThread ;
ClientMessage := AThread.Connection.ReadLn() ;
Memo2.Lines.Clear ;
ListBox1.Items.Clear ;
if ClientMessage <> 'imdisconnectedserver!' then
begin
if ClientMessage = 'itsyourpicture!' then
begin
recieveStreamPic := TFileStream.Create('pic.jpg',fmCreate);
strSize := myThreadsArrayInfo[0].myThreads.Connection.ReadInteger();
myThreadsArrayInfo[0].myThreads.Connection.ReadStream(recieveStreamPic, strSize,False);
FreeAndNil(recieveStreamPic);
JpgImage := TJPEGImage.Create ;
JpgImage.LoadFromFile('pic.jpg');
Image1.Picture.bitmap.Assign(JpgImage);
exit ;
end ;
for i:=0 to th_no-1 do
begin
try
if myThreadsArrayInfo[i].nickname <> 'NoNickName' then
NickName := myThreadsArrayInfo[i].nickname
else
NickName := '' ;
Memo2.Lines.Add(NickName + ' (' + myThreadsArrayInfo[i].myThreads.Connection.Socket.Binding.PeerIP + ') is Connecting' );
ListBox1.Items.Add(NickName + ' (' + myThreadsArrayInfo[i].myThreads.Connection.Socket.Binding.PeerIP + ') is Connecting' );
if AThread.Connection.Socket.Binding.PeerIP = myThreadsArrayInfo[i].myThreads.Connection.Socket.Binding.PeerIP Then
begin
tst := myThreadsArrayInfo[i].myThreads.Connection.Socket.Binding.PeerIP ;
if myThreadsArrayInfo[i].nickname <> 'NoNickName' then
NickName := myThreadsArrayInfo[i].nickname
else
NickName := '' ;
Memo1.Lines.Add(NickName + ' (' + tst +') : ' + ClientMessage) ;
end;
except on E:Exception do ShowMessage('ss');
end;
end ;
end
else
DisconnectedClient ( AThread ) ;
end;
پروسیجر DisconnectedClient اجرا میشود یا نه ..؟
shobair
چهارشنبه 29 شهریور 1385, 14:55 عصر
.
بجز دستور Exit راه دیگه ای برای خارج شدن از Procedure هست یا نه ؟
سلام
روی کلمه Exit کلید F1 بزنید و راهنمای دلفی رو ببینید.
احتمالا اگر قسمت Note رو بخونید به اشکال کار خودتون میرسید
شبیر
Mahyaa
چهارشنبه 29 شهریور 1385, 15:16 عصر
به اشکال کار خودتون میرسید
ولی این Exit در بلاک try نیست !!!!
amin a.^2
چهارشنبه 29 شهریور 1385, 15:32 عصر
ولی این Exit در بلاک try نیست !!!!
ببخشید اون موقه من کداشو ندیده بودم مگه نه!!!!!!!!!!!!!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.