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

نام تاپیک: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

  1. #1
    کاربر دائمی آواتار nsco_nsco
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    ایران
    پست
    831

    Cool مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    سلام دوستان من یک مشکل برام به وجود اومده اومدم یک دی ال ال به طور مثال به این صورت نوشتم :

    function D: PChar;stdcall;
    VAR
    S1:STRING ;
    begin
    S1:= DateToStr(Now );
    S1:=MidStr(S1,7,10);
    Result :=PChar(S1);
    end;


    اومدم و پس از گرفتن تاریخ سیستم گفتم دو کاراکتر مثلا فولان رو بگیر و به خروجی دی ال ال بده و در فایل اگزه به صورت دینامیک نمایش دادم من با دلفی 2010 و ویندوز سون برنامه رو نوشتم مشکل اینجاست پس از اینکه در سون اجرا می کنم به خوبی نمایش داده می شود و به خوبی جدا سازی کاراکتر انجام می شود اما در ویندوز اکس پی این کار رو درست انجام نمی دهد و دو کاراکتر مثلا یکی بعد رو می گیرد و نمایش می دهد .
    حالا می خواستم ببینم میشه کاری کرد که به صورت یک فرمت نمایش داده شود مثل نمایش ساعت به شکل زیر :

    S1:= formatdatetime('HH:MM:SS',time);

    تا دیگه با یک فرمت خاص دیگر مشکل افرین نشود ممنون می شوم سریع پاسخ بدید با تشکر از همه شما دوستان

  2. #2
    کاربر دائمی
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    کاشان
    پست
    809

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    تابع DateToStr دوتا overload داره که تو overload دومش یک پارامتر از نوع TFormatSettings میگیره که فرمت تبدیل تاریخ رو مشخص می کنه.


    procedure TForm1.FormCreate(Sender: TObject);
    var
    TFM: TFormatSettings;
    begin
    TFM.DateSeparator:= '/';
    TFM.ShortDateFormat:= 'yyyy/mm/dd';
    Caption:= DateToStr(Now, TFM);
    end;

  3. #3

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    علاوه بر مورد ذکر شده میتونید از توابع DayOf , MonthOf , YearOf از کتاخانه DateUtils استفاده کنید ؛ مثلا :

    var
    aDate: TDate;
    aDay: Word;
    begin
    aDate:= Now;
    aDay:= DayOf(aDate);
    ShowMessage(IntToStr(aDay));
    end;

  4. #4

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    این کدی که نوشتید، چرا خروجی تابع رو PChar تعریف کردید؟ اگر یکی با یک زبان غیر دلفی بخواد با این DLL ارتباط برقرار کنه، باید منتظر چه نتیجه ایی باشه؟!


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  5. #5
    کاربر دائمی آواتار nsco_nsco
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    ایران
    پست
    831

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    سلام
    اقای کشاورز شما که گفتید با پی چار معرفی کنم تا در زبان های دیگه بشه استفاده کرد اخرش نفهمیدیم منظورتون چیه ؟؟؟ ممنون می شوم سریع پاسخ بدید .

  6. #6
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    گفتید با پی چار معرفی کنم تا در زبان های دیگه بشه استفاده کرد اخرش نفهمیدیم منظورتون چیه
    منظور از تنظیم نوع داده بصورت pchar برای dll برای استفاده در زبانهای دیگه اینه که شما به داده هایی اشاره کنید که نوع خاصی مثل formیا string و یا نمونه هایی مشابه نباشه بلکه اشاره به بایت یا char باشه نه string که شما در بالا بهش اشاره نمودید.

    Result :=PChar(S1);

  7. #7
    کاربر دائمی آواتار nsco_nsco
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    ایران
    پست
    831

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    سلام ممنون از اینی که گفتید اما ممنون می شوم یک مثالمثل اونی که من زدم بزنید چون از مثال بالا چیزی نفهمیدم با تشکر

  8. #8
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    ممنون از اینی که گفتید اما ممنون می شوم یک مثالمثل اونی که من زدم بزنید چون از مثال بالا چیزی نفهمیدم با تشکر
    اون چیزی که شما در پی اش هستید چندان سخت نیست اما اونچه که شما برداشت کردید و قصد استفاده ازش رو دارید اشتباه نیست ولی تضمینی ندارد به اینکه در همه جا کار بکنه مثلا اگر dll که به این طریق ساخته بشه ممکنه با بورلند سی سازگار باشه اما با vb و یا vs میتونه سازگار نباشه به همین دلیل به شما پیشنهاد شده که برای انتقال و ایجاد ارتباط بین داده ها از متغییرهای char یا بایت استفاده کنید .
    ولی اگر برنامه خودتان را بصورت زیر اصلاح کنید میتونید این ایراد رو بردارید(قسمت کامنت شده رو باید با متغییرها تعریف شده بصورت بایت سازگار کنید)

    function D: PChar;stdcall;
    VAR
    ُ1 : array [1..255] of byte;
    begin
    //S1:= DateToStr(Now );
    //S1:=MidStr(S1,7,10);
    Result :=PChar(@S1[1]);
    end;



  9. #9
    کاربر دائمی آواتار nsco_nsco
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    ایران
    پست
    831

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    سلام ممنون از پاسختون اما من با قرار دادن بایت ( تغییر نوع متغییر) الرور می دهد و می گوید که نمی تواند جا بگیرد در اس یک نمونه :

    function d: PChar; stdcall;
    VAR
    S1:array [1..255] of byte;
    begin
    S1:= formatdatetime('HH:MM:SS',time);
    Result :=PChar(@S1[1]);
    end;


    لطفا سریع کمک کنید با تشکر

  10. #10
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    اما من با قرار دادن بایت ( تغییر نوع متغییر) الرور می دهد و می گوید که نمی تواند جا بگیرد
    من جای شما باشم این کار رو انجام میدم.(البته برای این گزینه)

    function d: PChar; stdcall;
    VAR
    S1:array [1..255] of byte;
    begin
    CopyMemory(@S1[1], pchar(formatdatetime('HH:MM:SS',time)), 10);
    Result :=PChar(@S1[1]);
    end;

    اون طرف dll هم باید متوجه باشید که داده بصورت بایتی هست به همین دلیل برای محاسبات نیاز به تبدیل خواهید داشت.

  11. #11
    کاربر دائمی آواتار nsco_nsco
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    ایران
    پست
    831

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    سلام ممنون از پاسختون العان که این کد رو قرار می دم دیگه اصلا فایل اگزم هیچ چیز رو نمایش نمی دهد می گید چه کار کنم

  12. #12
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    العان که این کد رو قرار می دم دیگه اصلا فایل اگزم هیچ چیز رو نمایش نمی دهد می گید چه کار کنم
    اون کد یک نوع راهنمایی برای این کار بود.
    در ضمن این ایراد میتونه مربوط به محدوده تعریف متغییر باشه به نظرم متغییر(S1) رو بیرون از تابع تعریف کنید تا عمومی باشه.

  13. #13

    نقل قول: مشکل با نمایش دستورات در ویندوز نمایش با فرمت خاص)

    اقای کشاورز شما که گفتید با پی چار معرفی کنم تا در زبان های دیگه بشه استفاده کرد اخرش نفهمیدیم منظورتون چیه ؟؟؟ ممنون می شوم سریع پاسخ بدید
    ببینید، وقتی گفته میشه از PChar استفاده کنید، به این معنی نیست که هر جا میخواستید string بنویسید، جاش PChar بنویسید!

    شما رفتید یک متغیر string بصورت Local تعریف کردید، بعدش اونو به عنوان خروجی تابع با PChar برگشت دادید. خب این string یک نوع داده reference-counted هست، به صورت PChar به یک برنامه از یک زبان برنامه نویسی دیگه پاس بشه، چطور باید مدیریت بشه؟!

    شما باید از برنامه فراخوان DLL بخواید که براتون فضای مورد نیاز رشته خروجی رو فراهم کنه، سپس شما داده خروجی رو در اون فضای اختصاص داده شده، کپی کنید. چند بار قبلا این موضوع رو توضیح دادم، همین چند روز پیش یک لینک به یک نمونه کد هم در همین سایت قرار دادم.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

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

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