PDA

View Full Version : یه مشکل در تبدیل String به PAnsichar



nasr
دوشنبه 21 اردیبهشت 1383, 16:20 عصر
سلام

من یه مشکل با ShellExec دارم و اون اینه

کد زیر را برای باز کردن یک فایل اتوکد نوشته ام که این فایل به خوبی باز میشه


ShellExecute(handle,'open','acad.exe', 'g:\1.dwg' ,nil,SW_SHOWMAXIMIZED);


حالا من مسیر این فایل که در کد بالا نوشته ام G:\1.dwg را می خواهم از طریق برنامه بدهم یعنی مسیر فایل را در یک EditBox قرار دهم بعد به جای آدرس دهی آدرس فایل متن داخل Edit باشه
مثل زیر



ShellExecute(handle,'open','acad.exe', Edit.text ,nil,SW_SHOWMAXIMIZED);

این کد را هم قبول نکرد متوجه شدم که کد این قسمت String نیست و PAnsiChar است پس یک Function نوشتم به صورت زیر


function strtopansi(const g : string):PAnsiChar;
بعد هم از اون اینطور استفاده کردم


function TForm1.strtopansi(const g:String):PAnsiChar;
begin

end;
بعد بصورت زیر کد هایم را نوشتم


ShellExecute(handle,'open','acad.exe',strtopansi(E dit1.text) ,nil,SW_SHOWMAXIMIZED);
بازم جواب نمی ده به اینصورت که برنامه اتوکد را باز می کنه ولی فایلی که آدرسش در Edit1 هست را باز نمی کنه

آیا نباید در قسمت Function چیزی بنویسم چون دقیقا هین چیزی که در بالا می بینید را در برنامه نوشته ام

ممنون

vcldeveloper
سه شنبه 22 اردیبهشت 1383, 01:27 صبح
برای استفاده از PAnsiChar فکر نکنم احتیاج به نوشتن تابع داشته باشید!
فکر کنم با یه type cast ساده هم میشد این کار رو کرد
مثلا
Pchar(Edit1.Text)

در ضمن شما مطمپن هستید که اتوکد در خط فرمان پارامتری برای باز کردن فایل دریافت می کنه؟

nasr
سه شنبه 22 اردیبهشت 1383, 08:19 صبح
بله من این کار را تست کردم

اگه آدرس را در برنامه بنویسی دقیقا فایل را باز می کنه مثل زیر


ShellExecute(handle,'open','acad.exe', 'g:\1.dwg' ,nil,SW_SHOWMAXIMIZED);