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

مشكلة فى إرسال الصورة من جهاز لآخر عن طريق NMStrm1.postit

مغلق
بدأه إبراهيم_دياب5 في 16 يونيو 2002 · 5 رد · 631 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم إخوانى فى المنتدى:

لقد قمت بعمل هذا الكود لنقل صورة لسطح المكتب من جهاز لآخر ولكنه يعطينى رسالة خطأ

10038 : socket operation on non socket

ويقوم بإرسال الصورة مرة واحدة فقط فلو أنكم تعرفون حلاً لهذه المشكلة فأرجوا الإفادة - أو حتى لو تعرفون طريقة أخرى وأسرع

ستحتاجون لوضع الأدوات الآتية على الفورم

* button1

* image1

* NMStrmServ1,NMStrm1 من الــ fastNet *** ولا تنسى ضبط خاصية الــ host الخاصة بهم

procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;

strm: TStream);

begin

Image1.Picture.Bitmap.LoadFromStream(strm);

end;

procedure TForm1.Button1Click(Sender: TObject);

var

winHWND: HWND;

WinDC: HDC;

Rect: TRect;

ABitmap:TBitmap;

PicStream:TmemoryStream;

begin

WinHWND := GetDesktopWindow ();

WinDC := GetDC (WinHWND);

GetWindowRect (WinHWND, rect);

ABitmap := TBitmap.Create;

ABitmap.Width := rect.right-rect.left;

ABitmap.Height := rect.Bottom-rect.Left;

BitBlt (ABitmap.canvas.handle, 0, 0, ABitmap.Width, ABitmap.Height, WinDC, 0, 0, SRCCOPY);

ReleaseDC (WinHWND, WINDC);

PicStream := Tmemorystream.create;

ABitmap.SaveToStream (PicStream);

PicStream.Position := 0;

NMStrm1.PostIt(PicStream);

// NMStrm1.sendstream(PicStream);

// PicStream.Free

end;

وشكراً

إبراهيم دياب

#2

السلام عليكم

أخي العزيز ابراهيم

جربت الكود الموجود وهو يعمل جيدا وعمل على نفس الجهاز ومن خلال الشبكة

حسب الخطأ الذي يظهر فالخطأ يظهر من winsock وحسب ملف المساعدة

WSAENOTSOCK

(10038)

Socket operation on non-socket.

An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.

procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
  strm: TStream);
begin
Image1.Picture.Bitmap.LoadFromStream(strm);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  winHWND: HWND;
  WinDC: HDC;
  Rect: TRect;
  ABitmap:TBitmap;
  PicStream:TmemoryStream;
begin
  WinHWND := GetDesktopWindow ();
  WinDC := GetDC (WinHWND);
  GetWindowRect (WinHWND, rect);
  ABitmap := TBitmap.Create;
  ABitmap.Width := rect.right-rect.left;
  ABitmap.Height := rect.Bottom-rect.Left;
  BitBlt (ABitmap.canvas.handle, 0, 0, ABitmap.Width, ABitmap.Height, WinDC, 0, 0, SRCCOPY);
  ReleaseDC (WinHWND, WINDC);
  PicStream := Tmemorystream.create;
  ABitmap.SaveToStream (PicStream);
  PicStream.Position := 0;
  NMStrm1.PostIt(PicStream);
//NMStrm1.sendstream(PicStream);
  PicStream.Free
end;

وهذا الكود الذي استخدمته بالضبط

ان لم تزل المشكلة موجود معك، ارفق الملف بالرسالة لأفصحه عندي لنعرف من اين المشكلة

مع تحياتي

والسلام

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#3

أشكرك أخى العزيز على ردك ولكن المشكلة فى الكود ليست هى عدم عمله ولكنه يعمل مرة واحدة فقط بمعنى إنك لو حاولت الضغط على الــ button1 مرة أخرى فأن البرنامج لن يستجيب (Crashed) فأرجو الإفادة.

مع جزيل الشكر

إبراهيم دياب

#4

السلام عليكم

أخي انا لاتحدث هذه المشكلة معي

عموما قمت بتعديل البرنامج ليبعث صور Jpg بدلا من bmp وهذا يجعل العملية أسرع

uses
  Jpeg;
procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
  strm: TStream);
var
  Jpg : TJpegImage;
begin
  try
    Jpg := TJpegImage.Create;
    Jpg.LoadFromStream(Strm);
    Image1.Picture.Bitmap.Assign(Jpg);
  finally
    Jpg.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  winHWND: HWND;
  WinDC: HDC;
  Rect: TRect;
  ABitmap:TBitmap;
  PicStream:TmemoryStream;
  Jpg : TJpegImage;
begin
  try
    WinHWND := GetDesktopWindow ();
    WinDC := GetDC (WinHWND);
    GetWindowRect (WinHWND, rect);
    ABitmap := TBitmap.Create;
    ABitmap.Width := rect.right-rect.left;
    ABitmap.Height := rect.Bottom-rect.Left;
    BitBlt (ABitmap.canvas.handle, 0, 0, ABitmap.Width, ABitmap.Height, WinDC, 0, 0, SRCCOPY);
    ReleaseDC (WinHWND, WINDC);
    PicStream := Tmemorystream.create;
    Jpg := TJpegImage.Create;
    Jpg.Assign(ABitmap);
    Jpg.SaveToStream(PicStream);
    PicStream.Position := 0;
    NMStrm1.PostIt(PicStream);
  finally
    PicStream.Free;
    ABitmap.Free;
    Jpg.Free;
  end;

end;

وان شاء الله يشتغل معك تمام

مع تحياتي

والسلام

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#5

أخى العزيز محمد أشكرك على مجهودك معى ولكنى للأسف قد كنت عملت تحويل لــ Jpg ولكن للأسف ما زالت المشكلة مستمرة يقبل الإرسال مرة واحدة فقط وفى الثانيه يحدث Crash. على كل حال سأحاول وإحتمال يكون هناك مشكلة بسبب تحميلى للدلفى على الــ WinXp.

أخوك:

إبراهيم دياب

#6

أشكرك أخى العزيز محمد لقد نجح الكود ف العمل ولكن تظهر لى رسالة out of system resourecs أعتقد أن الخطأ كان عند إستقبال الصورة حيث أنها فى الكود القديم كنت أقرأ الــ STRM ، وشكراً

(f) (f) (f)

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…