View Full Version : بدست آوردن طول Selection در واحد اندازه گیری word
MEHRADIS
یک شنبه 17 مرداد 1389, 11:05 صبح
سلام. من می خوام محتویات یک cell از یک table رو که انتخاب می کنم، طولشو بدست بیارم. این کارو می تونم در واحد تعداد کاراکتر بدست بیارم. اما در واحد سانتیمتر یا اینچ یا واحد انتخاب شده در تنظیمات word بدست بیارم. می شه گفت این آخرین حلقه مفقوده نرم افزارمه. با تشکر.
tdkhakpur
یک شنبه 17 مرداد 1389, 14:00 عصر
به گمانم متد
CellRect()
میتواند مختصات سلول رو برایتان پیدا کند حالا تبدیل به متراژ استاندارد بستگی به نرم افزار شما دارد.
MEHRADIS
یک شنبه 17 مرداد 1389, 15:56 عصر
با تشکر آقای خاکپور عزیز.
اما "می خوام محتویات یک cell از یک table رو که انتخاب می کنم، طولشو بدست بیارم"
یعنی طول متن داخلش یا اصلا بیرون از table. طول یک متن رو چطور می شه بدست آورد؟
CellRect مختصات مصتطیل Cell رو بر می گردونه. اما من طول متن رو در واحد خط کش Word لازم دارم. یعنی در کل می خوام طول متن رو با طول خط بسنجم تا تعداد خطوط لازم رو بدست بیارم. چه راهی رو می تونید پیشنهاد کنید؟
tdkhakpur
یک شنبه 17 مرداد 1389, 19:15 عصر
اما "می خوام محتویات یک cell از یک table رو که انتخاب می کنم، طولشو بدست بیارم"
یعنی طول متن داخلش یا اصلا بیرون از table. طول یک متن رو چطور می شه بدست آورد؟
procedure TForm1.Button1Click(Sender: TObject);
var
text_Height, text_Width: integer;
begin
text_Width := Form1.Canvas.TextWidth('demo');
text_Height := Form1.Canvas.TextHeight('demo');
ShowMessage('Width is ' + IntToStr(text_Width) + ' pixels');
ShowMessage('Height is ' + IntToStr(text_Height) + ' pixels');
end;
یعنی در کل می خوام طول متن رو با طول خط بسنجم تا تعداد خطوط لازم رو بدست بیارم. چه راهی رو می تونید پیشنهاد کنید؟
برای همه متن میتوانید یک فونت را در نظر بگیرید تا ارتفاع یکسانی داشته باشد و خطوط هم بر اساس ارتفاع کارامترها سنجیده بشوند.
ولی باز به نحوه کار برنامه شما ارتباط دارد.
MEHRADIS
یک شنبه 17 مرداد 1389, 19:30 عصر
باز هم ممنون آقای خاکپور اما ظاهرا توجه نکردید که زمینه کار من MS Word هستش. در دلفی 2010 در حال اتوماسیون سازی (MS Word 14 (Ms Office 2010 هستم. من طول متن انتخاب شده در WordDocument رو بر اساس سانتیمتر لازم دارم. با تشکر.
tdkhakpur
یک شنبه 17 مرداد 1389, 22:36 عصر
من طول متن انتخاب شده در WordDocument رو بر اساس سانتیمتر لازم دارم.
خب شما با کدهای بالا اندازه متن را بصورت پیکسل در اختیار دارید حالا این به نوع فونت شما بستگی دارد که داخل یک اینچ یا همان 2.5 سانتی متر چند پیکسل رسم کند
بصورت زیر میتوانید طول متن را به سانتی متر داشته باشید.
(text_Width / Form1.Font.PixelsPerInch)*2.5 = پهنای متن بر اساس سانتی متر
(text_Height / Form1.Font.PixelsPerInch)*2.5 = ارتفاع متن بر اساس سانتی متر
MEHRADIS
دوشنبه 18 مرداد 1389, 13:30 عصر
جناب آقای خاکپور مطلبی که فرمودید در مورد فرم کاملا صحیحه اما من در فرم کاری انجام نمی دم که بتونم توسط canvas.textwidth یا با استفاده از TextMetrics این مقدار رو پیدا کنم. من با کامپوننت word یعنی WordApplication کار می کنم. من توسط کد نویسی سند Word رو با پسوند Docx باز می کنم و با کدنویسی داخلش رو مدیریت می کنم. کاری که می خوام انجام بدم اینه که در یک سند word متنی رو پیدا می کنم که کمتر از یک خطه. و انتخابش می کنم. حالا می خوام بعد از انتخاب متن بتونم بفهمم که طولش چقدره. لطفا این پست رو از اول یکبار دیگه مطالعه کنید. من به این موضوع خیلی احتیاج دارم. چون جهت گیری کارم رو مشخص می کنه. میدونم که 100% جواب داره. اما هنوز موفق نشدم. اگه بتونیم باهم جواب این مساله رو پیدا کنیم بسیار عالیه. با تشکر از توجهتون.
tdkhakpur
دوشنبه 18 مرداد 1389, 13:40 عصر
کاری که می خوام انجام بدم اینه که در یک سند word متنی رو پیدا می کنم که کمتر از یک خطه. و انتخابش می کنم. حالا می خوام بعد از انتخاب متن بتونم بفهمم که طولش چقدره
من هم منظورم form نبود بالاخره همان word فونت که داره میتوانید از پارامتر فونت استفاده کنید.
باز من هم یک سری به موردی که شما استفاده میکنید میزنم.
MEHRADIS
دوشنبه 18 مرداد 1389, 21:44 عصر
text_Width := Form1.Canvas.TextWidth('demo');
text_Height := Form1.Canvas.TextHeight('demo');
من دوباره چک کردم. Canvas که وجود نداره. از TextMetric هم نمیشه استفاده کرد.
tdkhakpur
سه شنبه 19 مرداد 1389, 13:57 عصر
خب ایجاد کنید
var
ACanvas : TControlCanvas;
begin
ACanvas := TControlCanvas.Create;
TControlCanvas(ACanvas).Control := Application.MainForm;
ACanvas.Font.Assign(Font);
ShowMessage('width in pixel is ' + IntToStr(ACanvas.TextWidth('Demo')));
ShowMessage('height in pixel is ' + IntToStr(ACanvas.TextHeight('Demo')));
ACanvas.Free;
end;
MEHRADIS
سه شنبه 19 مرداد 1389, 19:04 عصر
آقای خاک پور canvas ای که باید ایجاد بشه نباید مربوط به Application باشه. چون من در فرم کاری انجام نمی دم. در کامپوننت msword کار می کنم. یعنی این کار اگه بخواد شدنی باشه باید در کلاس word application باشه که اون هم وجود نداره. این راه عملی نیست.
از دوستان خواهش می کنم اگه کسی می تونه راهنمایی کنه.
tdkhakpur
سه شنبه 19 مرداد 1389, 23:09 عصر
من با کامپوننت word یعنی WordApplication کار می کنم.
من فکرم به برنامه نویسی برای پلت فرم دلفی رفت انگار شما دارید با ماکروهای word کار میکنید.
موفق باشید.
MEHRADIS
چهارشنبه 20 مرداد 1389, 10:08 صبح
خیر من با ماکروهای word کار نمی کنم. در دلفی با کامپوننت word که برای دلفی طراحی شده کار می کنم. این موضوع رو خدمتتون عرض کرده بودم. البته word در محیط خودش ماکرو هم رکورد می کنه که کدهاشو به زبان VB می ده. اما مشکل من پیدا کردن طول متن با استفاده از توابع تعریف شده در دلفیه و واقعا به مشکل خوردم.
MEHRADIS
پنج شنبه 21 مرداد 1389, 20:18 عصر
من هنوز مشکلم حل نشده و به کمک احتیاج دارم. آقای خاکپور موضوع رو بررسی کردین؟
tdkhakpur
پنج شنبه 21 مرداد 1389, 20:28 عصر
خروجی برنامه شما چیه؟(exe) اگر میتوانید کد ارسال کنید من که متوجه نشدم شما با چه پلت فرمی کار میکنید!
MEHRADIS
شنبه 23 مرداد 1389, 13:40 عصر
نمونه ای از برنامرو واستون میفرستم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.