هل يمكن للدالة ارجاع اكثر من قيمة
#1
السلام عليكم ورحمة الله وبركاته 

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

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

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

شكرا لاهتمامك اخي
قل إن صلاتي ونسكي ومحياي ومماتي لله رب العالمين
الرد
#4
PHP كود :
type
  TMyRec 
record
    Str 
String;
    Boo Boolean;
  end;

function 
DoQuery(AQueryString): 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
[-] كل من 1 user says قال شكرا ل onexite على المشاركة المفيدة
  • ELARAPY
الرد
#5
السلام عليكم
الموضوع فيه كل طرق ارجاع اكثر من قيمة بدالة
http://delphi4arab.net/forum/showthread.php?tid=10271
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
[-] كل من 2 users say قال شكرا ل S.FATEH على المشاركة المفيدة
  • delphi17, ELARAPY
الرد
#6
الكود الذي قرأته خاص بلغة C وارجاع قيمتين باستخدام المؤشرات

الكود مرفق
قل إن صلاتي ونسكي ومحياي ومماتي لله رب العالمين
الرد
#7
اسف اخي الحبيب عندي مشكلة مع النت


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

PHP كود :
type
TMyRecord 
record
First
integer;
Secondstring;
end;

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

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

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

uses
  sysutils
Math;

var
  hoursinteger;
  minutesinteger;

proceudre minutesDevision(var hourspointerinteger; var minutespointerinteger);
begin
  hourspointer 
:= Floor(minutespointer 60);
  minutespointer := minutespointer mod 60;
end;

begin
  hours 
:= 0;
  minutes := 90;

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

end
[-] كل من 1 user says قال شكرا ل merouane على المشاركة المفيدة
  • ELARAPY
الرد
#10
وعليكم السلام ورحمة الله وبركاته

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

كود :
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;
لأستهلنّ الصعب أو أدرك المنى    فما انقادت الآمال إلاّ لصابر
الرد


التنقل السريع :


مستخدمين يتصفحوا هذا الموضوع: 1 ضيف