مقدمة
يفرض تطوير برامج الويب تحديات كبيرة على أدوات التطوير. في مواجهة الاحتياجات العديدة للمستخدمين، أطلقت العديد من الشركات عددًا كبيرًا من منصات التطوير: تلك المخصصة لتطوير تطبيقات سطح المكتب وبرامج C/S، وتلك المخصصة لتطوير البرامج الوسيطة، وتلك المخصصة لتطوير الويب. الخوادم. يؤدي هذا إلى مواجهة المبرمجين لعدد كبير من الأدوات دون أي وسيلة للبدء.
تختلف DELPHI عن أدوات التطوير الأخرى لأنها نظام مفتوح وطالما أنك تستخدم بعض عناصر التحكم بمرونة، يمكنك تطوير أنواع مختلفة من الأنظمة، سواء برامج N-Tie، أو برامج متعددة الخيوط، أو برامج الحوسبة الموزعة (بما في ذلك DCOM و CORBAR). )، وبرامج TCP، وبرامج الويب، وActiveX، والبرامج الوسيطة، وبرامج الدفع، ويمكنك حتى استخدامها لكتابة برامج التجميع.
تقوم DELPHI بتغليف ISAPI/NSAPI/CGI/WCGI وما إلى ذلك بذكاء في فئة. يمكن للمستخدمين الحصول على أنظمة مختلفة طالما أنهم يختارون نتائج التجميع أثناء التجميع.
في DELPHI4، قامت InPRise بتعزيز دعمها لتطوير برامج الويب ويمكنها تطوير أنظمة أفضل وأقوى. فيما يلي العديد من المشكلات الشائعة في تطوير تطبيقات الويب للرجوع إليها. إذا لم يكن هناك بيان خاص، فهذا يعني أن البرنامج يعمل تحت DELPHI 4.
كيفية إرجاع صورة من تطبيق خادم الويب؟
لا يستطيع تطبيق خادم الويب إنشاء مستندات صفحات معقدة فحسب، بل يمكنه أيضًا إرجاع صور مختلفة وفقًا لطلبات المستخدم. بالطبع، هناك طريقة أبسط اعتمادًا على معلمات الإدخال، تشير العلامة <img src...> أيضًا إلى عناوين URL مختلفة. نحن لا نستخدم هذه الطريقة هنا، ولكننا نستخدم ملف DLL لإرجاع الصورة.
بالطبع، يجب عليك أولاً إنشاء حاوية صفحة (منتج الصفحة) بالمحتوى التالي:
〈أتش تي أم أل〉
〈الجسم〉هذا اختبار〈BR〉〈img src=″/scripts/mydll.dll/picture″〉〈/body〉
〈/أتش تي أم أل〉
بعد ذلك، نقوم بتعيين حدث الإجراء المطابق لـ PathInfo ونعيد نتيجة الصورة، ويكون كود المصدر كما يلي:
(ملاحظة: يجب تضمين وحدة JPEG في إعلان الوحدة)
الإجراء TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
فار
JPG: TJpegImage;
S: TMemoryStream؛
يبدأ
Jpg := TJpegImage.Create;
يحاول
Jpg.LoadFromFile('test');
S := TMemoryStream.Create;
يحاول
Jpg.SaveToStream(S);
الموقف:= 0;
Response.ContentType := ′image/jpeg′;
Response.ContentStream := S;
// يجب أن يكتمل قبل إطلاق الدفق
Response.SendResponse;
أخيراً
س.مجاني؛
نهاية؛
أخيراً
Jpg.Free;
نهاية؛
نهاية؛
في الواقع، هذه الطريقة أكثر أمانًا ومرونة من الطريقة البسيطة المذكورة أعلاه. يمكن استخدامه بمرونة في بعض الأماكن، ويمكن للتعديلات الطفيفة المبنية عليه أن تنتج تأثيرات يصعب تحقيقها باستخدام أدوات التطوير العامة.
كيفية استخدام برنامج تشغيل الوصول الأصلي مع مكتبة الارتباط الديناميكي ISAPI/NSAPI (DLL)؟
وذلك لأن DAO 3.0 أو DAO 3.5 هو ما يسمى ببرنامج آمن لمؤشر الترابط (برنامج آمن لمؤشر الترابط)، وسيقوم خادم الويب (مثل IIS) بإنشاء سلاسل رسائل متعددة وفقًا لطلبات المستخدم، ويتم أيضًا إدراج DLL المطابق لـ ISAPI كخيط. في هذا الوقت، سيقوم ISAPI بإعلام DAO من خلال BDE، لإخباره بأنه لا يتوافق مع لوائح أمان سلسلة الرسائل.
هناك العديد من الحلول إذا كان يجب عليك الوصول إلى مكتبة Access 95/97، فيمكنك الوصول إليها من خلال ODBC. لا يمر ODBC عبر DAO وهو أيضًا برنامج آمن لمؤشر الترابط. بالإضافة إلى ذلك، هناك بعض مجموعات التحكم التابعة لجهة خارجية والتي يمكن من خلالها الوصول إلى Access 95/97 مباشرة من BDE، وهو أكثر كفاءة.
يصل المستخدم إلى ملف ISAPI DLL على خادم الويب الخاص بي، لكنه يبلغ: "اسم ملف غير صالح"، على الرغم من وجود الملف. بالمناسبة، قاعدة البيانات الخاصة بي موجودة على خادم Novell. لماذا هذا؟
لم تقم بتكوين تعيين مسار محرك الأقراص (MAPING) المطابق لحساب IUSR_XXX الخاص بك. نظرًا لأن Novell لا يستخدم FAT، يجب إضافة تعيين المسار يدويًا. بالطبع، يمكن تحويله إلى برنامج نصي لتسجيل الدخول للتمهيد. ضع في اعتبارك أنه إذا كنت تقوم بتشغيل IIS كخادم ويب وكنت مشتركًا في Novell، إما كخادم ملفات أو خادم قاعدة بيانات، فيجب عليك تحديد تعيين المسار.
"معلمة تكوين غير صالحة للاسم المستعار {alias_name}" (تكوين اسم مستعار غير صالح)، يحدث هذا الخطأ عندما أقوم بإعداد ODBC DSN والوصول إلى خادم ISAPI/NSAPI من خلاله.
إذا كنت تريد إنشاء اسم مستعار لـ ODBC لمستخدم الوصول (مستخدم IIS)، فكن حذرًا لإنشاء SYSTEM DSN (نظام DNS) بدلاً من إنشاء "user DNS"، على الرغم من أن "user DNS" هو الإعداد الافتراضي.
كيفية الحصول على اسم وعنوان IP للعميل (جهاز الوصول)؟
من السهل جدًا تنفيذ هذه الوظيفة باستخدام التحكم في TCP. حدد عنصر تحكم TCP من صفحة الإنترنت واحصل على ما تحتاجه مباشرة:
Memo1.Lines.Add(TCP1.LocalHostName);
Memo1.Lines.Add(TCP1.LocalIp);
بالطبع، إذا كنت لا ترغب في القيام بذلك، فهناك طرق أكثر تعقيدًا:
يستخدم Winsock؛
الإجراء TForm1.FormCreate(Sender: TObject);
فار
wVersionRequested: كلمة؛
wsaData: TWSAData;
يبدأ
{إنشاء وينسوك}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
نهاية؛
الإجراء TForm1.Button1Click(Sender: TObject);
فار
ص: PHostEnt؛
الصورة: مجموعة [0..128] من شار؛
p2: بشار؛
يبدأ
{الحصول على اسم الكمبيوتر}
GetHostName(@s,128);
p:=GetHostByName(@s);
Memo1.Lines.Add(p^.h_Name);
{الحصول على عنوان IP للجهاز}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Memo1.Lines.Add(p2);
نهاية؛
الإجراء TForm1.FormDestroy(Sender: TObject);
يبدأ
{أطلق سراح وينسوك}
com.WSACleanup;
نهاية؛
هذه وحدة مستقلة تسمى WINSOCK، والتي يمكنك تضمينها مباشرة في برنامجك.
لماذا لا يمكنني إنشاء ملف DLL حقيقي متعدد الخيوط في DELPHI 3؟
على الرغم من أن معالج ISAPI DLL في DELPHI3 قد أنشأ الكثير من التعليمات البرمجية لإنشاء ملفات DLL متعددة الخيوط، إلا أنه لا يزال هناك عيب خطير: فهو لا يذكر أن هذا التطبيق هو برنامج متعدد الخيوط. لذا عليك إضافة جملة:
IsMultiThread := TRUE;
ضع هذه الجملة في بداية كتلة البداية لبرنامج DPR، مما يجعلها الجملة الأولى.
كيف أعرف إذا كنت متصلاً بالإنترنت حاليًا؟
إن أبسط طريقة هي استخدام مكون TCP للحصول على عنوان IP الحالي الخاص بك، وتحديد ما إذا كنت متصلاً بالإنترنت من خلال الحكم على عنوان IP. على سبيل المثال:
إذا كان TCP1.LocalIp = '0.0.0.0' إذن
ShowMessage('غير متصل بالإنترنت حاليًا!');
وتجدر الإشارة إلى أنه نظرًا لعدم وجود فرق جوهري بين الإنترنت والإنترانت، فمن المستحيل عمومًا تحديد ما إذا كان متصلاً بالإنترنت أم متصلاً بالإنترانت فقط. بالتأكيد. يمكنك أيضًا إضافة مكون PING إلى موقع PING وهو موقع مستقر وسريع نسبيًا، فإذا كان متصلاً، فهذا يعني أن لديك إمكانية الوصول إلى الإنترنت. ومع ذلك، هذه الطريقة ليست متعددة الاستخدامات للغاية.
كيفية طباعة صفحة ويب؟
يمكنك اختيار استخدام أسلوب الطباعة التلقائية لعنصر تحكم HTML. على سبيل المثال:
يستخدم الطابعات.
الإجراء TForm1.Button1Click(Sender: TObject);
فار
OldCur: TCursor;
يبدأ
OldCur := Screen.Cursor;
مع الطابعة تفعل
يبدأ
BeginDoc;
HTML1.AutoPrint(handle);
العنوان := HTML1.URL;
EndDoc;
نهاية؛
Screen.Cursor := OldCur;
نهاية؛
بالإضافة إلى ذلك، يمكنك أيضًا استخدام طريقة PrintPage الخاصة به. ومع ذلك، أنصحك باستخدام الطباعة التلقائية، لأن عنصر التحكم هذا أكثر مرونة ويمكنه تصفية بعض المحتوى الذي لا ترغب في طباعته.
مدونة المؤلف: http://blog.csdn.net/zou5655/