نمایش نتایج 1 تا 11 از 11

نام تاپیک: مشکل با بستن Acrobat Reader

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    134

    مشکل با بستن Acrobat Reader

    pdf1 := Tpdf.Create(Self);
    pdf1.Parent := panel1;
    pdf1.Align := alClient;
    pdf1.Visible:=true;

    pdf1.LoadFile(ExtractFilePath(application.ExeName) +'data\temp\11.pdf');

    با سلام به همه دوستان
    از طریق کد ذیل یک فایل را در فرم باز کرده و نمایش میدهم حال می خواهم هنگام بستن فرم فایل بسته و آکروبات نیز از حافظه خارج شود. با دستور زیر هم اینکار را انجام میدهم ولی پس از چند بار باز و بسته کردن حافظه کلی اشغال می شود و بعضی اوقات هم فایهای اشتباه نمایش داده میشوند مثلا اگر یک فایلی 200 صحفه باشد دیگر از حافظه خارج نشده و همواره آنرا نمایش میدهد و باید یکبار از برنامه خارج شد تا اصلاح شود. بنظر شما اشکال در کجاست؟
    این بستن فایل:

    pdf1 := nil;
    pdf1.Free;

  2. #2
    نقل قول نوشته شده توسط ehsane مشاهده تاپیک
    pdf1 := Tpdf.Create(Self);
    pdf1.Parent := panel1;
    pdf1.Align := alClient;
    pdf1.Visible:=true;

    pdf1.LoadFile(ExtractFilePath(application.ExeName) +'data\temp\11.pdf');

    pdf1 := nil;
    pdf1.Free;
    مگه داری دات نت کد مینویسی که پوینترت رو Nil میکنی؟!
    وقتی میزنی PDF := nil حافظه ای که PDF گرفته که Free نمیشه که ، فقط پوینتری که به PDFی که ساختی از بین میره و بصورت یک گاربج تو حافظه باقی میمونه ، و کد PDf1.Free هم چون بعدش اجرا میشه دیگه نمیتونه حافظه رو آزاد کنه چون دیگه nil شده.
    خلاصه که اول Close کن، بعد Free کن بعد اگه خواستی Nil کن ، نکردی هم نکردی.

  3. #3
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    134
    نقل قول نوشته شده توسط ghabil مشاهده تاپیک
    مگه داری دات نت کد مینویسی که پوینترت رو Nil میکنی؟!
    وقتی میزنی PDF := nil حافظه ای که PDF گرفته که Free نمیشه که ، فقط پوینتری که به PDFی که ساختی از بین میره و بصورت یک گاربج تو حافظه باقی میمونه ، و کد PDf1.Free هم چون بعدش اجرا میشه دیگه نمیتونه حافظه رو آزاد کنه چون دیگه nil شده.
    خلاصه که اول Close کن، بعد Free کن بعد اگه خواستی Nil کن ، نکردی هم نکردی.
    دوست عزیز با تشکر از شما - با استفاده از روش که شما گفتید می توان تا زمانی که در داخل برنامه هستی از آن براحتی استفاده کرد ولی پس از خروج از برنامه آکروبات همچنان در حافظه باقی می ماند و اگر کاربر چند بار برنامه را اجرا کند مشکل کمبود حافظه دوباره شروع می شود.
    در ضمن pdf1 هم close ندارد یا من نتونستم پیدا کنم.

  4. #4
    در مورد " بعد از خروج از برنامه آکروبات همچنان در حافظه باقی میماند میشه بیشتر توضیح بدین، یعنی چجوری شد به این نتیجه رسیدین ؟
    احتمالی که من میدم اینه که شاید هر دفعه که لود میکنید بعد از پایان کار حافظه رو خالی نمیکنید ، یعنی مثلا وقتی یک فایل جدید رو لود میکنید فایلی که قبلا لود بوده رو حافظش رو آزاد نمیکنید و مثلا فقط در آخر کار حافظه گرفته شده برای آخرین کد رو آزاد میکنید...

  5. #5
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    134
    نقل قول نوشته شده توسط ghabil مشاهده تاپیک
    در مورد " بعد از خروج از برنامه آکروبات همچنان در حافظه باقی میماند میشه بیشتر توضیح بدین، یعنی چجوری شد به این نتیجه رسیدین ؟
    احتمالی که من میدم اینه که شاید هر دفعه که لود میکنید بعد از پایان کار حافظه رو خالی نمیکنید ، یعنی مثلا وقتی یک فایل جدید رو لود میکنید فایلی که قبلا لود بوده رو حافظش رو آزاد نمیکنید و مثلا فقط در آخر کار حافظه گرفته شده برای آخرین کد رو آزاد میکنید...
    دوست عزیز در برنامه من ممکن است کاربر به دفعات فایلهای مورد نظر را باز یا بسته کند در هر مرحله به گفته دوستمان با (خلاصه که اول Close کن، بعد Free کن بعد اگه خواستی Nil کن ، نکردی هم نکردی) این روش آنرا می بندم ، حال وقتی کاربر از برنامه خارج میشود و کلا برنامه را می بندد با مشاهده task manager میتوان در حافظه بودن آکروبات را مشاهده کرد. و وقتی برای بار بعدی کاربر وارد برنامه میشود و مجددا یک فایل را باز می کند دوباره یک آکروبات دیگر در حافظه قرار می گیرد.
    بنظرم دستور free نمی تواند آنرا از حافظه اصلی ویندوز خارج کند. نظر شما چیه؟

  6. #6
    نقل قول نوشته شده توسط ehsane مشاهده تاپیک
    بنظرم دستور free نمی تواند آنرا از حافظه اصلی ویندوز خارج کند. نظر شما چیه؟
    بنظر من همون که دوستمون گفته کافیه (طبیعتا) . به شرطی که آبجکت آکروباتی دیگه ای درست نکرده باشی. یعنی فقط یک TPDF ساخته باشی (ضمنا این TPDF رو از کجا آوری ؟ اینترفیس خود Acrobat رو Import کردی یا داری از کامپوننت استفاده میکنی؟).
    چون با توجه به اینکه Owner آبجکتهارو هم Self میدی ، با بسته شدن نرم افزار حتی اگر خودت هم این کدها رو دستی نبندی خود برنامه حافظشون رو خالی میکنه.
    خلاصه که نگاه کن ببین از اول Agent آکروبات بالا نیست ، یعنی قبل از اینکه برنامت رو اجرا کنی تو حافظه یک آکروبات نیست؟ اگر نبود ، دیگه تنها راهی که به ذهنم میرسه اینه که کدی که باهاش PDF رو میسازی و Free میکنی رو بزاری اینجا نگاش کنیم.

  7. #7
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    پس از خروج از برنامه آکروبات همچنان در حافظه باقی می ماند
    در قسمت onClose فرم task مربوط به acrobat را EndProcess کنید ...
    در مورد حذف پروسه ها هم جستجو کنید ، مطالب مورد نظر را می یابید.

    یا حق ...

  8. #8
    نقل قول نوشته شده توسط Hamid_PaK مشاهده تاپیک
    در قسمت onClose فرم task مربوط به acrobat را EndProcess کنید ...
    در مورد حذف پروسه ها هم جستجو کنید ، مطالب مورد نظر را می یابید.
    پاک کردن صورت مسئله بجای حل اون فقط تعدا مشکلات رو بیشتر میکنه.

  9. #9
    دوست خوبم

    فرمی را که در اون OCX ادوب اکروبات رو داری می بایست فری کنی و مجدد بسازی

    زمان نمایش

    Application.CreateForm(TForm3, Form3);
    Form3.AcroPDF1.setShowToolbar(True);
    Form3.AcroPDF1.LoadFile(_Path+'Documents\'+Sender) ;
    Form3.ShowModal


    زمان بستن فرم در رویداد OnClose فرم

    procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Action:=caFree;
    end;


    راستی یادت نره باید اول بری از منوی project گزینه Options رو انتخاب کنی و فرم مذکور رو در قسمت Availble Form اضاقه کنی تا در زمان نمایش اولیه پیغام خطا نده

  10. #10
    نقل قول نوشته شده توسط ehsane مشاهده تاپیک
    ولی پس از خروج از برنامه آکروبات همچنان در حافظه باقی می ماند و اگر کاربر چند بار برنامه را اجرا کند مشکل کمبود حافظه دوباره شروع می شود.
    نقل قول نوشته شده توسط حرفه ای مشاهده تاپیک
    دوست خوبم

    فرمی را که در اون OCX ادوب اکروبات رو داری می بایست فری کنی و مجدد بسازی
    با بستن برنامه تمام فرمها اتوماتیک Free میشوند. و مشکل ایشون با بستن برنامه همچنان باقیست. پس مشکل این نیست.

  11. #11
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    134
    نقل قول نوشته شده توسط ghabil مشاهده تاپیک
    با بستن برنامه تمام فرمها اتوماتیک Free میشوند. و مشکل ایشون با بستن برنامه همچنان باقیست. پس مشکل این نیست.
    دقیقا همین اتفاق می افتد ، یعنی اصلا کل فرمهای برنامه در زمان اجرا ایجاد میشوند و با بستن هر فرم هم free میشوند ولی این هیچ ربطی به خارج کردن آکروبات از حافظه ندارد. یادم هست زمانی که از ورد استفاده می کردم با یک دستور میتوانستم آنرا از حافظه نیز خارج کنم wordapp.close فکر کنم این بود. بنظرم باید دستوری برای خارج کردن برنامه آکروبات نیز وجود داشته باشد که شما بتوانید با زدن یک کلید آنرا احضار و با زدن کلید دیگر آنرا از حافظه خارج کنید برای دیدن موضوع نیز میتوان task manager را احظار و عین عملی که اتفاق می افتد را مشاهده کرد.
    هنوز به جواب نرسیدم

تاپیک های مشابه

  1. پاسخ: 10
    آخرین پست: جمعه 30 دی 1384, 16:45 عصر
  2. adobe acrobat reader
    نوشته شده توسط vahid13 در بخش برنامه نویسی در 6 VB
    پاسخ: 3
    آخرین پست: شنبه 07 آذر 1383, 08:58 صبح
  3. فراخوانی acrobat reader
    نوشته شده توسط SReza1 در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: دوشنبه 21 مهر 1382, 00:37 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •