PDA

View Full Version : نوشتن حروف وسط



h00manb
دوشنبه 28 فروردین 1391, 17:10 عصر
سلام
با چه دستوری میتوان حالتهای متصل حروف مانند"ﭕ" (ب وسط) را نوشت؟
متشکر

mohsen24000
دوشنبه 28 فروردین 1391, 19:34 عصر
دستور خاصی نمی خواد ، کافیه از کدهای یونیکد اون استفاده کنید.
برای مثال کد یونیکد کاراکتری که بهش اشاره کردید: 65170 است.

h00manb
دوشنبه 28 فروردین 1391, 21:18 عصر
به نظر شما ادیتورها این کار میکنند؟

mbshareat
سه شنبه 29 فروردین 1391, 00:29 صبح
سلام
خیلی پیش در مورد کارکترهای خاص سوال کرده بودم.یکی چنین کدیبرام گذاشت.اما نمی دونم چرا خوب عمل نمی کنه:

var
S: PWideChar;
begin
S := WideChar(65170);
TextOutW(form1.Canvas.Handle, 200, 100, S, 2);
end;

mohsen24000
سه شنبه 29 فروردین 1391, 00:40 صبح
یعنی چی خوب عمل نمی کنه!
با همین کد شما دقیقا تصویر حرف "ب وسط" روی فرم ترسیم میشه

h00manb
سه شنبه 29 فروردین 1391, 06:51 صبح
ببینید موضوع فقط حرف وسط ب نیست , تمامی حروف مد نظر من هست , به نظر شما باید 65000 تا if استفاده کنم؟
توی ادیتور ها وقتی شما دکمه ای را فشار میدهید با توجه به حرف قبل و بعد آن تشخیص میدهد که چه حالتی از حرف را نمایش دهد اما موضوع این است که کد نمایش حرف را چطور بدست می آورد؟

mohsen24000
سه شنبه 29 فروردین 1391, 08:27 صبح
شما در مورد ادیتور خاصی صحبت می کنید!؟ ادیتورهای معمول در ویندوز خودشون قرار نیست کاری انجام بدهند، این سیستم عامل ویندوز هست که نحوه نمایش حروف فونت رو بر اساس جایگاهشون در کلمه بعهده داره!!! و قرار نیست که شما برای حالتهای مختلف حروف کاری انجام بدید. شما فقط کافیه حروف تایپ شده رو داخل یک string ذخیره کنید و نحوه نمایش با خود ویندوز... مگر اینکه هدف دیگه ای رو دنبال کنید.

h00manb
سه شنبه 29 فروردین 1391, 08:54 صبح
در حقیقت من نمیخوام یک ادیتور طراحی کنم بلکه در حال طراحی یک برنامه گرافیکی هستم که یک متن دریافت میکند و این برنامه متن را با جلوه های ویژه به صورت دو و سه بعدی نمایش میدهد
مشکل اینجاست که کد یونیکد کلی حرف در متن با کد یونیکد حالتهای مختلف حرف (اول وسط آخر تنها) فرق دارد و اگر بخواهم حروف وسط را بدون اشکال نمایش بدم باید کد حالت حرف را بدانم نه کد کلی حرف و چون برنامه کلی است و فقط مربوط به زبان فارسی نیست باید بفهمم که برنامه های دیگر یا خود ویندوز چطور این کد را تشخیص میدهند

mbshareat
سه شنبه 29 فروردین 1391, 09:31 صبح
سلام
این کد رو اجرا کردم:

procedure TForm1.Button1Click(Sender: TObject);
var
S: PWideChar;
begin
Canvas.font.Name:='Tahoma';
Canvas.font.size:=25;
S := WideChar(65170);
TextOutW(form1.Canvas.Handle, 200, 100, S, 2);
end;

و این خروجی رو گرفتم:
85869
من هم یه زمانی اگر این کد رو داشتم خوب بود؛ چون می خواستم تو لیست باکس ویرایش متن انجام بدم.
سوال اینه که برنامه های ادیتور چطور می تونن مکان نما رو به محل صحیح در وسط کلمه منتقل منتقل کنند.
وقتی از TextWidth استفاده کنیم نمی تونیم محل صحیح رو بدست بیاریم.فرض کنین می خوایم مکان نما بعد از حرف 'ت' در کلمه 'متن' قرار بگیره اگر از ('مت')X-TextWidth استفاده کنیم باید مکان نما رو روی 'ن' قرار بدیم!!!

mbshareat
دوشنبه 11 اردیبهشت 1391, 00:42 صبح
سلام
ShowMessage(' '+#158+'گ'+#158+' ');
کد بالا گ وسط رو می نویسه!
کارکتر 157 فاصله جامده (همون نیم فاصله) و 158 برای چسبوندن به طرفین!
(البته حواستون باشه که در سایت کد ناجور به نظر می رسه ولی هنگام الصاق در دلفی درست میشه!)