delphi4arab منتديات دلفي للعرب

نسخة كاملة : هل يمكن للدالة ارجاع اكثر من قيمة
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته 

انا اعلم ان  Function يمكن ان ترجع اكثر من قيمة فهل يمكن مثال لدلفي ؟
ماذا تقصد ؟ هل تعني في نفس الدالة او شى اخر
راجع delphi overload function ايضا
(13-08-2019, 11:25 AM)delphi17 كتب : [ -> ]ماذا تقصد ؟ هل تعني في نفس الدالة او شى اخر
راجع delphi overload function ايضا

في نفس الدالة وليس دالة مطابقة في الاسم مختلفة في الوظيفه ,, لا اقصد Overload  وسبق لي من فترة القراءة عنها ولم اطبق وعلى الاغلب Overload هي فقط نمط من OOP .

فقط قرأت ما قرأت في كتاب لغة C ووجدت ما استفسر عنه في دلفي

شكرا لاهتمامك اخي
PHP كود :
type
  TMyRec 
= record
    Str 
: String;
    Boo : Boolean;
  end;

function 
DoQuery(AQuery: String): TMyRec;
begin
  
// do stuff
  Result.Str := 'hello';
  Result.Boo := False;
end;

procedure CallQuery;
begin
  with DoQuery
('this is my query') do
    if Boo then
      Edit1
.Text := Str;
end; 
السلام عليكم
الموضوع فيه كل طرق ارجاع اكثر من قيمة بدالة
http://delphi4arab.net/forum/showthread.php?tid=10271
الكود الذي قرأته خاص بلغة C وارجاع قيمتين باستخدام المؤشرات

الكود مرفق
اسف اخي الحبيب عندي مشكلة مع النت
وعليكم السلام ورحمة الله وبركاته.
الدالة (Function) في الدلفي لا يمكنها ارجاع أكثر من قيمة.
لكن هناك بعض الحيل من بينها :
1- ارجاع قيمة داخل الدالة لمتغير عام.
2- انشاء دالة من نوع Record.

PHP كود :
type
TMyRecord 
= record
First
: integer;
Second: string;
end;

function 
MyFunction: TMyRecord;
begin
result
.First := 1;
result.Second := 'Hello';
end; 
(15-08-2019, 09:29 AM)ELARAPY كتب : [ -> ]الكود الذي قرأته خاص بلغة C وارجاع قيمتين باستخدام المؤشرات

في الصورة المرفقة void تقابلها procedure في لغة باسكال
أما عن إرجاعه قيمتين، هي لم ترجع قيمتين وإنما عدلت على القيمين عبر المؤشر (أخذت عنوان القيمة ثم قام بالتعديل) 

 أقرب ترجمة له هو كالتالي:
PHP كود :
program Project1;

uses
  sysutils
, Math;

var
  hours: integer;
  minutes: integer;

proceudre minutesDevision(var hourspointer: integer; var minutespointer: integer);
begin
  hourspointer 
:= Floor(minutespointer / 60);
  minutespointer := minutespointer mod 60;
end;

begin
  hours 
:= 0;
  minutes := 90;

  minutesDevision(hours, minutes);
  writeln(inttostr(hours) + ' hours and ' + inttostr(minutes) + ' minutes');
  readln;

end. 
وعليكم السلام ورحمة الله وبركاته

نعم يمكن ان ترجع اكثر من قيمة  في الدلفي

كود :
function MyFunct(i:Integer ;out x,y :Integer): string; begin   Result :='Hello abou mouad ' ;   x:=i+1;   y:=i+2; end; procedure TForm1.Button1Click(Sender: TObject); var x,y :Integer; begin label1.caption :=MyFunct(1,x,y)+x.ToString+ ' '+ y.ToString; end;