PDA

View Full Version : wide char ها



S M A D
سه شنبه 20 خرداد 1393, 19:33 عصر
سلام
یه سوالیه که خـــــــــــــــــیلی منو درگیر کرده همین wide char هاست...
میشه یه توضیح مختصر در موردش بدید و بگید که چجوری میشه تبدیلش کرد به استرینگ؟
همچنین بگید که آیا آبجکتی مثل ممو memo وجود داره که از widechar ها استفاده کنه؟
چون این Widechar ها رو برای دستور کپی می خوام.
اگه مقدور بود بگید این 4 تا پارامتر درون کپی فایل هرکدوم دقیقا چین؟؟؟

Var
;P:Widechar
.
.
.
.
;(Copyfile(Widechar,Widechar,Widechar,Widechar

vcldeveloper
چهارشنبه 21 خرداد 1393, 00:50 صبح
میشه یه توضیح مختصر در موردش بدید

WideChar یک نوع داده برای نگهداری یک کارکتر یونیکد هست که از قدیم در دلفی وجود داشته. در نسخه های قدیمی دلفی نوع داده Char برای کارکتر های تک بایتی ANSI و WideChar برای کارکترهای دو بایتی یونیکد استفاده میشده. در نسخه های جدید دلفی Char خودش یونیکد شده، و کمتر نیاز میشه که مستقیما نوع داده WideChar استفاده بشه، مگر زمانی که بخوایم کدمون با نسخه های قدیمی تر دلفی هم سازگار باشه.


چجوری میشه تبدیلش کرد به استرینگ؟
string نوع داده ایی برای نگهداری مجموعه ای از کارکترها ست. string رو میشه به زبان ساده آرایه ای از کارکترها دانست (البته ساختارش در دلفی کمی پیچیده تر از یک آرایه ساده است). شما می تونید به راحتی یک کارکتر WideChar رو در دلفی به یک متغیر string اختصاص بدید. پس نوع داده شون با هم سازگاره.


همچنین بگید که آیا آبجکتی مثل ممو memo وجود داره که از widechar ها استفاده کنه؟
میتونه وجود داشته باشه. دقیقا هدفت چیه؟


چون این Widechar ها رو برای دستور کپی می خوام.
اگه مقدور بود بگید این 4 تا پارامتر درون کپی فایل هرکدوم دقیقا چین؟
CopyFile یک تابع API ویندوز هست. توضیحات مربوط به پارامترهاش و نحوه عملکردش رو باید از MSDN مطالعه کنی.

تابع CopyFile سه پارامتر میگیره که اولی نام فایل مبداء، دومی نام فایل مقصد، و سومی مشخص میکنه آیا در صورت وجود فایل مقصد، فایل موجود با فایل مبداء جایگیزین بشه یا خیر.
دو پارامتر اول در دلفی به صورت PWideChar تعریف شدند، یعنی اشاره گری که به یک داده از نوع WideChar اشاره میکنه. علتش هم اینه که API ویندوز مبتنی بر زبان برنامه نویسی C هست، و در C شما یک نوع داده مشخص برای رشته ها ندارید، بلکه یک رشته یک آرایه ساده از کارکترها است که به null ختم شده باشه. در نتیجه نوع داده string دلفی برای API ویندوز قابل فهم نیست. البته در طراحی نوع داده string دلفی سعی شده تا حد امکان با رشته ها در C سازگار باشه، تا فراخوانی توابع API ویندوز از داخل کدهای دلفی چندان پیچیده نشه.

با توجه به اینکه پارامترهای فوق در تابع CopyFile فقط ورودی هستند، و لازم نیست از طرف ویندوز مقادیر اونها تغییر داده بشه، و از طرفی سعی شده نوع داده string دلفی با رشته های C سازگار باشه، و string و widechar هم با هم سازگاری نوع دارند، پس با یک typecast ساده میشه از همون نوع داده string دلفی توی فراخوانی تابع CopyFile استفاده کرد:

var
Source,
Dest : string;
begin
Source := 'C:\sourcefile.txt';
Dest := 'C:\destfile.txt';
if not CopyFile(PWideChar(Source), PWideChar(Dest), False) then
RaiseLastOSError;
end;


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

موفق باشی

S M A D
شنبه 31 خرداد 1393, 15:29 عصر
WideChar یک نوع داده برای نگهداری یک کارکتر یونیکد هست که از قدیم در دلفی وجود داشته. در نسخه های قدیمی دلفی نوع داده Char برای کارکتر های تک بایتی ANSI و WideChar برای کارکترهای دو بایتی یونیکد استفاده میشده. در نسخه های جدید دلفی Char خودش یونیکد شده، و کمتر نیاز میشه که مستقیما نوع داده WideChar استفاده بشه، مگر زمانی که بخوایم کدمون با نسخه های قدیمی تر دلفی هم سازگار باشه.


string نوع داده ایی برای نگهداری مجموعه ای از کارکترها ست. string رو میشه به زبان ساده آرایه ای از کارکترها دانست (البته ساختارش در دلفی کمی پیچیده تر از یک آرایه ساده است). شما می تونید به راحتی یک کارکتر WideChar رو در دلفی به یک متغیر string اختصاص بدید. پس نوع داده شون با هم سازگاره.


میتونه وجود داشته باشه. دقیقا هدفت چیه؟


CopyFile یک تابع API ویندوز هست. توضیحات مربوط به پارامترهاش و نحوه عملکردش رو باید از MSDN مطالعه کنی.

تابع CopyFile سه پارامتر میگیره که اولی نام فایل مبداء، دومی نام فایل مقصد، و سومی مشخص میکنه آیا در صورت وجود فایل مقصد، فایل موجود با فایل مبداء جایگیزین بشه یا خیر.
دو پارامتر اول در دلفی به صورت PWideChar تعریف شدند، یعنی اشاره گری که به یک داده از نوع WideChar اشاره میکنه. علتش هم اینه که API ویندوز مبتنی بر زبان برنامه نویسی C هست، و در C شما یک نوع داده مشخص برای رشته ها ندارید، بلکه یک رشته یک آرایه ساده از کارکترها است که به null ختم شده باشه. در نتیجه نوع داده string دلفی برای API ویندوز قابل فهم نیست. البته در طراحی نوع داده string دلفی سعی شده تا حد امکان با رشته ها در C سازگار باشه، تا فراخوانی توابع API ویندوز از داخل کدهای دلفی چندان پیچیده نشه.

با توجه به اینکه پارامترهای فوق در تابع CopyFile فقط ورودی هستند، و لازم نیست از طرف ویندوز مقادیر اونها تغییر داده بشه، و از طرفی سعی شده نوع داده string دلفی با رشته های C سازگار باشه، و string و widechar هم با هم سازگاری نوع دارند، پس با یک typecast ساده میشه از همون نوع داده string دلفی توی فراخوانی تابع CopyFile استفاده کرد:

var
Source,
Dest : string;
begin
Source := 'C:\sourcefile.txt';
Dest := 'C:\destfile.txt';
if not CopyFile(PWideChar(Source), PWideChar(Dest), False) then
RaiseLastOSError;
end;


موفق باشی

ممنون ......
كليت رو گرفتم .فقط من چند تا چيزو نفهميدم.
١- كاراكتر يونيكد چيه؟
٢- تابع adi چيه؟؟؟
٣- يعني چي كه رشته يك آرايه ساده از كاراكتر هاست كه به null ختم ميشه؟
٤- تايپ كست چيه؟
٥- تو اون كدي كه نوشتين raiselastoserror; چيه؟
٠- شما به چه مدت دلفي كار كردين؟


WideChar


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

موفق باشی
چشم...
اين دفعه حواسم نبود ....
از دفعه هاي بعد چشم در قسمت مربوطه مي نويسم.

pezhvakco
سه شنبه 03 تیر 1393, 08:45 صبح
١- كاراكتر يونيكد چيه؟
٢- تابع adi چيه؟؟؟
٣- يعني چي كه رشته يك آرايه ساده از كاراكتر هاست كه به null ختم ميشه؟
٤- تايپ كست چيه؟
٥- تو اون كدي كه نوشتين raiselastoserror; چيه؟


1 - یونیکد یکی از استاندارد در زمینه تبادل اطلاعات چند زبانه است (یه جورایی کامل ترین همی است) = یونیکد امکان کد گذاری همه کاراکتر های موجود در همه زبان ها برای نوشتن را پشتیبانی می کند.

2 - تابع ADI نه =>
API = Application Programming Interface

3 - ارایه دارای ویژگی هایی هستند مانند چگونگی شروع ، شمارنده، اشاره گر به خانه بعدی و شناسه پایان آرایه .
برنامه ها برای برای نشانه گذاری پایان یک آرایه، شناسه های مختلفی بکار می برند که در این مورد Null بکار گرفته شده.

4 - Type Casting = تغییر ساختار

5 - raiselastoserror یه رویه برای نمایش و یا کنترل خطا
چرا در همین سایت و دیگر سایت ها جستجو نمی کنید

بهروز عباسی
سه شنبه 03 تیر 1393, 08:58 صبح
آقا يه نيم نگاهي به ما بكنين عاشقانه !
!
دوستان پاسخ مناسب رو ارائه دادن!

١- كاراكتر يونيكد چيه؟
٢- تابع adi چيه؟؟؟
٣- يعني چي كه رشته يك آرايه ساده از كاراكتر هاست كه به null ختم ميشه؟
٤- تايپ كست چيه؟
٥- تو اون كدي كه نوشتين raiselastoserror; چيه؟
همه این سوالات تکراریه و قبلا درموردشون به دفعات بحث شده، لطفا جستجو کنید.

لطفاً قوانین سایت رو مطالعه کنید.