الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤالين .. ؟ .. يحتاجون الى خبير للأجابة عليهم .. !

مغلق
بدأه win32 في 21 ديسمبر 2003 · 9 رد · 860 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم

يا اخوان عندي سؤالين محيريني من زمان ...ولم اتوصل الى اجابة لهم .. . !

السؤال الأول : حول الأبليكشن ايفنت " ApplicationEvents " اداة محترمة جدآ

انا استخدمتها لألغاء الرايت كلك في البرنامج .. في فورم يوجد فية ويب براوزر

وفي نفس الوقت لأضهار popupmenu بدل popup الأفتراضية الموجودة في

البراوزر وذالك بأستخدام الكود التالي في حدث OnMessage

تبع ال ApplicationEvents :

if Msg.message = WM_RBUTTONDOWN then begin
popupmenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
Handled := True;
  end;

والمشكلة ان هذة العملية تم تعميمها على كل البرنامج ..!

والمطلوب ... هو فقط ان تعمل على الفورم المحدد فقط .. !

وهذا كل شي بالنسبة الى السؤال الأول .

-------------------------------

السؤال الثاني : عن " API Application " وطريقة التعامل مع الــ Resources

او بالتحديد طريقة استخراج ما بداخل Resources

مثلآ في الـ VCL Application لما اريد استخراج ما في الــ Resources

استخدم الكود التالي :

var
SystemDir : array[0..MAX_PATH] of Char;
SWFDir, AppDir: String;
Fres: TResourceStream;
Ffile: TFileStream;

begin
GetSystemDirectory(@SystemDir,MAX_PATH);
SWFDir := SystemDir;
GetDir(0,AppDir); // Get current directory

           {$i+}
 Fres := TResourceStream.Create(0,'MyFileName',RT_RCDATA);
 Ffile := TFileStream.Create(AppDir+'\MyFileName.exe',fmCreate);
 Ffile.CopyFrom(Fres,Fres.Size);
 Fres.Free;
 Ffile.Free;
end;

وتنجح العملية معاي .. طبعآ في الـ VCL Application

والمطلوب هو : كيف استطيع التعامل مع الــ Resources في API Application

حاولت بعدة طرق ولم اجد الحل ..و ما اريدة هو استخراج ما بداخل الـResources

و للمعلومية انا اقصد بـ Console Applicatio ... Non VCL " ... API Application "

وعفوآ على الأطالة ...وشكرآ مقدمآ لمن يحل هذة المشكلة او يحاول حلها .

مع تحيااااااااااااتي للجميع

#2

احم احم

السؤال الثاني

مااعرف اذا كان صح او لا المهم هذا الكود

><لاستخراج ملف صوتي من ملف المصادر><

    uses mmsystem;
    ...
    procedure TForm1.Button1Click(Sender: TObject);
    var
    hFind, hRes: THandle;
    Song: PChar;
    begin
    hFind:=FindResource(HInstance, 'MailBeep', 'WAVE');
    if hFind<>0 then begin
    hRes:=LoadResource(HInstance, hFind);
    if hRes<>0 then begin
    Song:=LockResource(hRes);
    if Assigned(Song) then
    SndPlaySound(Song, snd_ASync or snd_Memory);
    UnlockResource(hRes);
    end;
    FreeResource(hFind);
    end;
    end;

السؤال الأول عندي برنامج وفيه نفس الطريقه اذا ضغطت بالزر الايمن على الفورم لحاله

تظهر قائمه خاصه فيها لصق ونسخ .....

كيف اقدر اسوي نفس الطريقه على EDIT

شكل القائمه رائع صراحه

محمـــــــــد

المملكه العربيه السعوديـــه

[الفريق العربي للبرمجه الأفضـل دائما]

/

::::::::::::::::::::::::::::::::::::

msvbvm60.dll = فيجوال بيسك

.................= دلفــــــــــــــي

::::::::::::::::::::::::::::::::::::

#3

أخي العزيز Win32 , بالنسبة للمشكلة الأولى بسيطة .

فقط أضف الشرط Form1.Active قبل التعليمات , حيث لن تنفذ التعليمات السابقة إلا إذا كان الفورم الأول هو المفعل حاليا ,

ستصبح الشفرة :

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
IF form1.Active then
if Msg.message = WM_RBUTTONDOWN then begin
popupmenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
Handled := True;
 end;

أما بالنسبة للسؤال الثاني , لم أفهم قصدك تماما , فإذا كان المطلوب هو الوصول إلى الريسورس يكفي فقط إضافة توجية للمترجم Compiler لملف الريسورس ثم إستخدامة

مثال :

implementation

{$R *.dfm}
{$R ORWA.res}
.
.
.

procedure TForm1.Button2Click(Sender: TObject);
begin
Image1.Picture.Bitmap.LoadFromResourceName(hinstance,'B');
end;

وإذا كنت قد وضعت الريسورس في ملف Dll بدلا من الملف التنفيذي نفسة يكفي إستخدام ما يلي :

procedure TForm1.Button1Click(Sender: TObject);
var
  h : THandle;
 begin
  h := LoadLibrary('res.dll');
  Image1.Picture.Bitmap.LoadFromResourceName(h,'B');
  FreeLibrary(h);
end;

أتمنى أن أكون قد ساعدتك قدر المستطاع ...

ملاحظة :إذا لم يخب ظني أنت صديقنا Win32 في Arab Developers , أهلا بك .

سلام .

#4

ممكن توضحون أكثر :)

ماعرفت لطريقة القائمه اذا ضغطت على الزر الايمن

وكيف اقدر احددها على edit

محمـــــــــد

المملكه العربيه السعوديـــه

[الفريق العربي للبرمجه الأفضـل دائما]

/

::::::::::::::::::::::::::::::::::::

msvbvm60.dll = فيجوال بيسك

.................= دلفــــــــــــــي

::::::::::::::::::::::::::::::::::::

#5

يعطيكم العافية والله

ما قصرت يا دلفي الله يسلمك ولا انت يا ابو دلفي "عروة"

بالنسبة الى السؤال الأول بخصوص ApplicationEvents .. انتهت المشكلة ... : )

وبسراحة يا عروة .. اخر شي كنت افكر فية : IF form1.Active .. ما كانت على البال ابد

وتشكر يا عروة على المساعدة .. " وضنك ما خاب بخصوص Arab Developers "

اما سؤالي الثاني .. فا الى الأن لم استطع معرفة الطريقة .. او اني لم استوعب شرحكم

مع العلم يا شباب .. انا اعرف كيف اتعامل مع Resources في البرامج العادية ولكن في

وضعي الحالي اريد التعامل معة في Console Application وما اريدة بالضبط هو استخراج

ما يوجد في Resources الى اي مكان احددة في الجهاز فقط .

وشكرآ لكم مرة اخرى

#6

العفو

هذا اللى اقدر عليه

لكن لاتنسوني بطريقة عمل قائمه خاصه للنسخ والصق على edit

تراني متشوق لمعرفتها مثل الصوره هذي وكيف اقدر اكتب الاوامر الموجوده فيها واضع الاكواد الخاصه بالنسخ واللصق

semmmmm.jpg

وياليت تشوفون الصوره هذي

cannnnnnnnns.jpg

كيف اقدر اسوي نفس الطريقه لازرار الاغلاق والتصغير والتكبير

وفيه سهمين تحت لتغيير لون الفورم ممكن اعرف الطريقه

تحياتي

محمـــــــــد

المملكه العربيه السعوديـــه

[الفريق العربي للبرمجه الأفضـل دائما]

/

::::::::::::::::::::::::::::::::::::

msvbvm60.dll = فيجوال بيسك

.................= دلفــــــــــــــي

::::::::::::::::::::::::::::::::::::

#7

السلام عليكم

بالنسبة للسؤال الثاني اخي win32

فانه ماتقصده هو مايسمى ب non vcl application

وهي الطريقة البرمجة المستعملة ب الC++

عادة !وتكون بدون

استعمال vcl commponent وهي تختلف عن مايمسى ب consol application

وتلك هي الخاصة بالDos

إذا لنتفق اولا على المصطلح اسمها non vcl طبعا.....

في حال تطبيقات صغيرة وذات فعل كبير فلا غنا لك عن هذه التقنية لكنها تتطلب معرفة وخبرة باوامر Api

طبعا ستسعمل الكمبايلر المرفق مع دلفي والذي يدعى

brcc32.exe

المهم بالنسبة لمشكلتك

الكود الذي وضعته انت هو لتحرير الSection (إن صح التعبير ) في الrcdata

التابع للresources الخاص بالexe للبرنامج الخاص بك صح !

فالrecorcess التي تريد غير موجودة بكل بساطة وذلك لانك تريد resorcess الخاصة با الفورمز!

مثل هذه الطرق لن تفيدك سوى باظهار الunit المدمجة بذلك البرنامج

وللتاكد من صحة كلامي استعمل اي برنامج لفتح resources كا res hack او غيره من البرامج

للمزيد من المعلومات يوجد مثال رائع داخل مجلد Demos

اسمه resexplorer

_بالنسبة لسؤال الاخ

<دلفي>

ستضع بالطبع proup menu في حالة برنامجك الداخلي لو كنت تريد ان تضيف الاوامر

الobject الخاصة بك !

اما في الحالة الطبيعية ستكون مدمجة مع الwindows

اما إذا كنت تريد اضافة الاوامر في حالة context menu

راجع المجلد demos داخل Delphi

toolsapi

نراكم على خير باذن الله

اخوكم reda

You used to struggle with C++ libraries for Windows, and Delphi was and still is the best combination of object-oriented programming and visual programming for Windows

#8

شكرا لك Jawad

محمـــــــــد

المملكه العربيه السعوديـــه

[الفريق العربي للبرمجه الأفضـل دائما]

/

::::::::::::::::::::::::::::::::::::

msvbvm60.dll = فيجوال بيسك

.................= دلفــــــــــــــي

::::::::::::::::::::::::::::::::::::

#9

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

ويا هلا والله ابو جواد ... مشرفنا الغالي ..لازلت انت المشرف في نظري

ولا يهمني الأدارة .. : )

شكرآ لك على التوضيح .. مع العلم يا ابو جواد اني اقصد consol application

الخاص بالدوس ..وهو ما كنت اسئل عن طريقة التعامل مع recorcess فية

وللعم تمكنت من اضافة الـ recorcess الية ولكن لم استطع استخراج محتواة

على العموم هو شي كان في بالي اجربة لكنة غير مهم جدآ .. وعلى ذكر

الـconsol application .. سأرفق برنامج صغير عبارة عن ويب سيرفر حجمة

لا يتعدى ال 22 كيلو بايت .. وهو نفس نوعية البرنامج الذي كنت ارغب في

اضافة الـ recorcess الية .

تحياتي لك ابو جواد ولجميع الأخوان ... ولا تحرمنا من طلتك علينا .

ملاحظة البرنامج المرفق معدل الى :

الـ Index >>> الى السي //:c

الـ port >>>> مئة 100

WebServer.zip

#10

اسف اخي win32

لم انتبه جيدا

ساحاول البحث بالموضوع حالما اجد بعض الوقت

You used to struggle with C++ libraries for Windows, and Delphi was and still is the best combination of object-oriented programming and visual programming for Windows

هذا الموضوع مغلق.

مواضيع مشابهة