• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

زكيري عبد العالي

المشرفون
  • عدد المشاركات

    2,455
  • تاريخ الانضمام

  • تاريخ اخر زياره

السمعه بالموقع

47 عادي

عن زكيري عبد العالي

  • الرتبة
    مشرف قسم Delphi.Net
  • تاريخ الميلاد 12/21/1974

حقول إضافية

  • الشهادة مهندس دراسات وتطوير البرمجيات + حلاق ماهر

طرق الإتصال

معلومات الملف الشخصي

  • الجنس ذكر
  • الدولة : France
  • اهتمامات كرة القدم + السباحة

أحدث الزائرين لملفلك الشخصي

32,103 زياره للملف الشخصي
  1. صنع موقع ويب بالدلفي DataSnap/REST HTML5/jQuery

     
  2. صنع موقع ويب بالدلفي DataSnap/REST HTML5/jQuery

     
  3. دروس متقدمة في البرمجة

    السلام عليكم لقد قمت باسترجاع بعض الدروس التي كتبتها هنا و جلها قد اتلف عن ما كان المنتدى موقف و نقلتها الى صفحى  https://www.facebook.com/softwebnet/ ارجوا المشاركة 
  4. انا اعمل على c# منذوا اكثر من 5 سنوات االاسهل في هذا المشروع البسيط هو الدلفي زهذا مجرد راي الخاص  المهم هو انشاء المشروع و لا يهم اللغه المستعمل  شكرا 
  5. برنامج حساب الغاز والكهربة

    شكرا اخي الكريم
  6. صنع موقع ويب بالدلفي DataSnap/REST HTML5/jQuery

    السلام عليكم  بارك الله فيك اخي احمد  من هنا من ارى استاذي الكريم ORWA الحمد لله على سلامتك و ارجو من الله ان يحفضكم كم اتمنى ان يعود كل المشريفين القداما اخي عبد العزيز و محمد نسمان و الاخ Sum و الشقروني  كل من تعلمت على يديه و كم اتمني رجوع الخبراء على علوي و طلال بلال و احمد ز غيره المتدى بحاجة الينا كلنا .   
  7. صنع موقع ويب بالدلفي DataSnap/REST HTML5/jQuery

    لقد قمت ببعض التغيرات البسيطه لعمل الاضافة تجدونها في المرفق  و الان قد انتهينا من المشروع اتمنى اني وفقت في الشرح و السلام عليكم      MyWebApp.zip
  8. صنع موقع ويب بالدلفي DataSnap/REST HTML5/jQuery

    السلام علكم مع انه لا ارى اي رد الا اني ساتابع ان شاء الله يتقبل مني  سنتابع مع المثال السابق لكن الان يجب ملأ القاءمة من سجلات قاعدة البيانات  function FillUserList(): TList<TUser>; var mUser : TUser; var COMPANYSqlProc : TADOStoredProc; begin Result:= TList<TUser>.Create; COMPANYSqlProc := TDatabaseAccess.ExecProc('sp_Users'); COMPANYSqlProc.Open; while not COMPANYSqlProc.EOF do begin mUser := TUser.Create; mUser.mId:= COMPANYSqlProc.FieldByName('Id').AsInteger; mUser.mLogin:= COMPANYSqlProc.FieldByName('Login').AsString; mUser.mFirstName:=COMPANYSqlProc.FieldByName('FirstName').AsString; mUser.mLastName:=COMPANYSqlProc.FieldByName('LastName').AsString; Result.Add(mUser); COMPANYSqlProc.Next; end; COMPANYSqlProc.Close; end; لقد قمت يتعيير في كود الوضيفة FillUserList حيث اننا انشانا القاءمة فارغة ثم انشاءنا COMPANYSqlProc و الذي سيرجع لنا كل السجلات التي تحصلنا عليها من طلب الوضيف المخزنه sp_Users فكود هذه الوضيف create Procedure [dbo].[sp_Users] As Begin SELECT * FROM [DbUser] End بعدها عملت حلقه تكرارية لكل السجلات و في كل سجل انشاء ابجكت هو TUser و بعد ملاءه نضيفه الى القاءمة  لاننا غلق الاتصال بالقاعدة و اضافة الوحدة Data.DB, Data.Win.ADODB 2- كما تلاحضون اننا نفذنا Proc عن طريق TDatabaseAccess.ExecProc' حيث انها وضيفة من نوع Static و هي معرفة في الوحدة الجديدة التي اضفتها في المجلد الجديد Database class function TDatabaseAccess.ExecProc(name : string) : TADOStoredProc; var SqlProc : TADOStoredProc; begin try SqlProc := TADOStoredProc.Create(nil); SqlProc.ConnectionString := 'Provider=SQLNCLI11.1;Persist Security Info=False;User ID=sa;Password=***;Initial Catalog=*****;Data Source=**********;Initial File Name="";Server SPN=""'; SqlProc.ProcedureName := name; SqlProc.ExecProc(); Result := SqlProc; Except On e: Exception do SqlProc.Close; end; end;    
  9. صنع موقع ويب بالدلفي DataSnap/REST HTML5/jQuery

    السورس كود  MyWebApp_POST.zip
  10. صنع موقع ويب بالدلفي DataSnap/REST HTML5/jQuery

    السلام عليكم  نلاحض ان في القائمة السابقة 3 اشخاص الهدف من المثال التالي هو اضافة شخص جديد للقاءمة و ذللك من خلال الكلاس TUser نقوم باضافه وضيفة جديدة في API و لتكن SetUser  مع اداخل TUser و استرجاع القاءمة السابقة بالاضافة الاى هذا الاخير  function TProjectController.SetUser(user : TUser): TList<TUser>; var users: TList<TUser>; begin users:= FillUserList(); users.Add(user); Result:=users; end; الوضفة FillUserList هي من ترجع لنا القاءمة السابقة  ثم نضيف المستعمل الذي مررناه في param الى هذه القاءمة و نرجعها عن طريق Result  function FillUserList(): TList<TUser>; var mUser : TUser; begin Result:= TList<TUser>.Create; mUser := TUser.Create; mUser.mId:=1; mUser.mLogin:='zekiriAbd'; mUser.mFirstName:='Zekiri'; mUser.mLastName:='Abdelali'; Result.Add(mUser); mUser := TUser.Create; mUser.mId:=2; mUser.mLogin:='MohamedNA'; mUser.mFirstName:='Mohamed'; mUser.mLastName:='Nassman'; Result.Add(mUser); mUser := TUser.Create; mUser.mId:=3; mUser.mLogin:='AliW'; mUser.mFirstName:='Ali'; mUser.mLastName:='AlWi'; Result.Add(mUser); end; function TProjectController.GetUserList(): TList<TUser>; var mUser : TUser; begin Result:= FillUserList(); end; كما تلاحضون غير بعض الامور  انتهينا من API نعمل كومبيل  الان على مستوى html js نضيف  الوضيفة SetUser الى COMMN .JS  function SetUser(user,fnOnComplete) { $.ajax($fronted.SERVICE.add_user_url, { method: 'POST', xhrFields: { withCredentials: false }, data: JSON.stringify(user)}) .success(function (data) { var _data = JSON.parse(data); $fronted.Users = _data.result[0].fields.FItems; if (fnOnComplete) { fnOnComplete(); } }) .fail(function (xhr, textStatus, errorThrown) { }); } كما تلاحضون اني استعملت POST و ارسلت user الجديد في param الوضيفة ثم ارسلته الى api عن طرق الخاصية data التابعة لajax  نخزن النتيجة في fronted.Users  $fronted.SERVICE = { user_list_url : $fronted.host + "GetUserList", add_user_url : $fronted.host + "SetUser", }; كما تلاحضون اني اضفت url للمتود الجديد  الان نغيير في الواجهة فنضيف في ملف index.html  <div> Id: <input id="tx_Id" type="text" ><br> Login: <input id="tx_Login" type="text" ><br> First name: <input id="tx_FirstName" type="text" ><br> Last name: <input id="tx_LastName" type="text" ><br> <input id="btn_add_user" type="button" value="Add User"><br> </div> $("#btn_add_user").click(function (e) { var _fields = { LastName:$("#tx_LastName").val(), Id:parseInt($("#tx_Id").val()), FirstName:$("#tx_FirstName").val(), Login:$("#tx_Login").val() } var new_user = {type:"User.TUser",id:1,fields:_fields}; SetUser(new_user ,function(){ DrawUserGrid() }); }); } الكود التالي معنا عند النقر على الزر add user سنقوم ب -1 حفض كل المعلومات الدخل عن طرق تكس بوكس في الابجكت _fields  2- صنع ابجكت يفهمه API و ضالك باضافة type:"User.TUser"  id:1 3- نقم بطلب الوضيفة SetUser ; حيث نمرر في param الاول هذا الابجكة الذي صنعناع  و البرامتر الثاني هي callback اى عند الانتهاء من طلب الويب متود الموجودة في API فقم ب صنع الجدول DrawUserGrid   ملاحضة هامة عند استعما POST لست ادري لماذا دلفي يبحث عن الوضيفة بتسميتها + update  لذلك قمت بتغيير الوضيفة على مستو API الى   TProjectController.updateSetUser(user : TUser): TList<TUser>;       demoUserEdit.avi
  11. صنع موقع ويب بالدلفي DataSnap/REST HTML5/jQuery

    5- ها انتهينا من المودل و الكنترولر و لم يبقي سوى الفيو View  اي القسم الخاص بالعرض و كبعا قنا هده الطبقة ستكون بHTML5 / jQuery / CSS3   1- قمت وضع ديف في الصفحة سمته  <div id="div_users"> هنا سنضع قاءمة المستعملين   2- غيرت url السابق الى  $fronted.host = "http://delphibackend.net//DelphiBackend.dll/datasnap/rest/TProjectController/"; $fronted.SERVICE = { user_list_url : $fronted.host + "GetUserList", }; 3- وكتبت في الميتود التي ستتخاطب مع API التالي  function GetUsers(fnOnComplete) { $.ajax($fronted.SERVICE.user_list_url, { method: 'GET', xhrFields: { withCredentials: false } }) .success(function (data) { var _data = JSON.parse(data); $fronted.Users = _data.result[0].fields.FItems; if (fnOnComplete) { fnOnComplete(); } }) .fail( function(xhr, textStatus, errorThrown) { }); }  اي بعدما استرجعت القاءمة و تحويلها الى json وضعتها في fronted.Users الابجكت  الان سنكتب الكود الذي سيرسم لنا الجدول حيث وضعته في ملف جديد Index.js void function index_function(undefined) { function InitAppWhenReady() { // call api GetUsers(function () { // Draw users grid var table = $("<table id='grid_users' cellpadding='0' cellspacing='0' class='display'></table>"); var thead = $("<thead><tr><th>ID</th><th>Login</th><th>Name</th></tr></thead>"); table.append(thead); var tbody = $("<tbody></tbody>"); var tr; $.each($fronted.Users, function (i, u) { if( u != null){ tr = $("<tr></tr>"); tr.append("<td>" + u.fields.Id + "</td><td>" + u.fields.Login + "</td><td>" + u.fields.FirstName + " " + u.fields.LastName + "</td>"); tbody.append(tr); } }); table.append(tbody); $("#div_users").empty(); $("#div_users").append(table); $("#grid_users").DataTable(); }); // end GetUsers } $(document).ready(function () { if (document.getElementById) { InitAppWhenReady(); } }); }.call(); اضن ان الكود سهل هو عبارة عن حلقة تكرارية لكل مستعمل في القاءة و وضعه في td  DataTable() هدا التعليمة تسمح تحويل الجدول العادي html الى  datagrid و دلك بواسطة jquery dataTables لذلك كتب في مقدمة الملف index.html    <!--jquery Lib--> <script type="text/javascript" src="js/lib/jquery/jquery-2.1.3.min.js"></script> <script type="text/javascript" src="js/lib/jquery/dataTables.js"></script> <link type="text/css" rel="Stylesheet" href="js/lib/jquery/dataTables.css" /> <script type="text/javascript" src="js/common.js"></script> <script type="text/javascript" src="js/index.js"></script> <link type="text/css" rel="Stylesheet" href="css/index.css" /> النتيجة هي  ها قد انتهينا من المرحة الاولى وهي عملة GET في الدرس القادم سنقوم بعملية POST و بعدها مباشرة سنقوم بمثال مع استعمال قاعدم بيانات . ارجوا ان الدرس مفهم و صحا فطوركم  MyWebApp2_Get_ListGenericofObject.zip
  12. صنع موقع ويب بالدلفي DataSnap/REST HTML5/jQuery

    السلام عليكم  لم اشهاد تجاوب مع هذا الموضوع ارجوا ان لا اياس و اكم الى النهايه  1- سنحاول الان عرض قاءمة في جدول كمثال قاءمة مستعملين اي الرقم الاسم اللقب ... و هي خصاءص لكلاس نسميها مثلا Tuser و هكذا تكون الوحدة User كمايلي  unit User; interface type {$METHODINFO ON} TUser = class private LastName: string; Id: integer; FirstName: string; Login: string; procedure SetFirstName(const Value: string); procedure SetId(const Value: integer); procedure SetLastName(const Value: string); procedure SetLogin(const Value: string); { Private declarations } public { Public declarations } Property mId: integer read Id write SetId; Property mLogin : string read Login write SetLogin; Property mFirstName : string read FirstName write SetFirstName; Property mLastName : string read LastName write SetLastName; end; {$METHODINFO OFF} implementation { TUser } procedure TUser.SetFirstName(const Value: string); begin FirstName := Value; end; procedure TUser.SetId(const Value: integer); begin Id := Value; end; procedure TUser.SetLastName(const Value: string); begin LastName := Value; end; procedure TUser.SetLogin(const Value: string); begin Login := Value; end; end. نقوم بحفض هدا الملف في مجلد نسميه Models و هكذا نجمع كل المودلات في هذا المجلد  2- اتذكرون الوحدة التي كتبنا فيها الويب متود  Hello و التي قام الدلفي بتسميها ServerMethodsUnit1  سننقلها الى مجلد جديد اسمه Controllers و نغير اسمها الى ProjectController  مثلا. هنا نقوم وضع جميع ويب متود الخاصة بالمشروع  في هذا المثال سنقوم بعمل متود تقوم بشحن قاءمة من المستعملي في list و ارجاعها كاملة  TProjectController = class(TComponent) private { Private declarations } public { Public declarations } function GetUserList(): TList<TUser>; end; {$METHODINFO OFF} implementation function TProjectController.GetUserList(): TList<TUser>; var mUser : TUser; begin Result:= TList<TUser>.Create; mUser := TUser.Create; mUser.mId:=1; mUser.mLogin:='zekiriAbd'; mUser.mFirstName:='Zekiri'; mUser.mLastName:='Abdelali'; Result.Add(mUser); mUser := TUser.Create; mUser.mId:=2; mUser.mLogin:='MohamedNA'; mUser.mFirstName:='Mohamed'; mUser.mLastName:='Nassman'; Result.Add(mUser); mUser := TUser.Create; mUser.mId:=3; mUser.mLogin:='AliW'; mUser.mFirstName:='Ali'; mUser.mLastName:='AlWi'; Result.Add(mUser); end; كما تلاحضون اني انشاءت 3 ابجكت من نوع TUser  وضعتهم في قاءمة مسترجعة عن منادات الميتود GetUserList. 3- انقل WebModuleUnit1 الى مجلد جديد نسميه مثلا Swagger 4- قمت بحدف كل المجلدات الاخرى img css ... لكن قبل الحذف احفضها في مكان ما على القرص و تاكد انها موجود نسخة منهم في المجلد \Debug لاننا نحتاجها في عرض و تجربت كل الويب متود الموجود . علما اني استعمل http://swagger.io/ في مشاريعي .net  ولست ادري ان كنا نستطيع استعمالها مع الدلفي سنرى ذلك لاحقا    لنتحصل على : بعد توقيف الPool و عمل كمبير للمشروع نقوم بعرض النتيجه على المتصفح 
  13. صنع موقع ويب بالدلفي DataSnap/REST HTML5/jQuery

    نقوم بطلب الموقع على المتصفح  http://delphifrontend.net/index.html النتبجه لاتعمل هناك رسالة خطأ نعم لانه يجب علينا ان نقول للجزء الاول datasnap و الذي ساسميه من الان API لسرعت الشرح نعم يجب علينا ان نقول ل API ان الموقع الدي سيطلب منك الخدمة هو delphifrontend. كما يمكن ان نقول ايضا انك ستخدم جميع المواضع التي تطلبك  يتم ذلك باضافة الكود التالي في الوحدة WebModuleUnit1 اي تغيير الوضيفة TWebModule1.WebModuleBeforeDispatch procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin Response.SetCustomHeader('Access-Control-Allow-Origin', '*'); if Trim(Request.GetFieldByName('Access-Control-Request-Headers')) <> '' then begin Response.SetCustomHeader('Access-Control-Allow-Headers', Request.GetFieldByName('Access-Control-Request-Headers')); Handled := True; end; if FServerFunctionInvokerAction <> nil then FServerFunctionInvokerAction.Enabled := AllowServerFunctionInvoker; end; ملاحضة عند عمل كومبيل يجب توقيف POOL DelphiBackend ليتم انشاء Dll الجديد .   لقد قمت بوضع السورس كود مع بعض التغييرات + css + صورة  ان شاء الله ساكمل الدرس بعمل تمرير ابجكت او قاءمة ابجكت من Api الى الجافا سكربت ثم نقوم بعرض النتيجة في جدول html. ثم نحول الجدول الى Dbgrid الدي يقدمه Bootstrap و الذي يسما datatable شكرا  MyFirstWebApp.zip
  14. صنع موقع ويب بالدلفي DataSnap/REST HTML5/jQuery

    2- Html5 / Js في هذا الجزء سنقوم بعمل مشروع ويب بسيط يقوم باضهار رسالة Hello Word و التي يرسلها له الجزء الاول Datasnap ,و لتخاطب معه سنسعمل اوامر ajax عن طريق jquery فنبدا ان شاء الله  1- نضيف مشروع جديد نسميه DelphiFrontend حيث به - مجلد  سنضع كل ملفات الجافا سكربت هنا  - img للصور  - css للانماط  - ملف html نسميه Index.html  web config سيضاف اتوماتكيا عن التغير في IIS  لاحض الصورة  نكتب في ملف index.html الكود التلي  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <!--jquery Lib--> <script type="text/javascript" src="js/lib/jquery/jquery-2.1.3.min.js"></script> <script type="text/javascript" src="js/common.js"></script> </head> <body> </body> </html> ساضع في المجد LIB كل ما نجتاجه من js  و نكتب في common.js الكود التالي  $fronted = {}; $fronted.host = "http://delphibackend.net//DelphiBackend.dll/datasnap/rest/TServerMethods1/"; $fronted.SERVICE = { helloword_method_url : $fronted.host + "HelloWorld", }; /*====================================================================== Service Web Metod ======================================================================*/ function HelloWorld() { $.ajax($fronted.SERVICE.helloword_method_url, { method: 'GET', xhrFields: { withCredentials: false } }) .success(function (data) { alert(JSON.parse(data).result[0]); }) .fail( function(xhr, textStatus, errorThrown) { }); } HelloWorld() الشرح  انشات ابجكت fronted$ من نوع  globale  به الخاصية host التي نجد فيها مسار الوضيفة التي نريد طلبها  http://delphibackend.net/DelphiBackend.dll/datasnap/rest/TServerMethods1/HelloWorld لو كتبنا هدا على النتصفح لاعطان النتيجه التاليه  {"result":["Hello World"]} ادا URL لهذا العميل هو مركب من http://delphibackend.net/ و هو عنوان موقعنا الخاص بالجزء الاول  + الكلمة /datasnap/rest/  + اسم الوحدة التي كتبنا فيها مختلف الوضاءف TServerMethods1 + اسم الوضيفة  قمنا باستدعاء هذه الوضيفة عن طريق الاجكس و كما تلاحضون انها من نوع GET 2- الان سنضيف موقعنا على IIS  بمثل ما قمنا به في المرة الاولى لكن لا نغير ولا شيء في POOL نتحصل على  الان نتاكد من ان كلا الموقعين من نوع Authentication  Anonymous نضيف الموع على الهوست