PDA

View Full Version : کار با تصویر در RichTextBox



samiasoft
پنج شنبه 21 آبان 1394, 03:14 صبح
سلام دوستان

دو سوال با این موضوع داشتم :


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

بطوری که وقتی میخواهم مواردی که شامل عکس و تصویر باشه رو داخل RichTextBox کپی کنم فقط متن انتخابی کپی میشه و دیگر عکسی داخلش وارد نمیشه! چرا تصویر کپی نمیشه؟برای حل این مشکل به نظرتون چه کار باید کرد؟

احتمالا باید کلیپ برد رو بررسی کنیم و متن و عکس رو از هم تشخیص بدم و سپس تصویر داخل یک پیکچرباکس بریزیم و بعد از اون داخل ریچ تکست باکس بیاریم؟ اینطوری سخت میشه .


- سوال بعدی که نتونستم اونو حل کنم اینه که :

فرض کنیم اگر داخل ریچ تکست باکس متن و چندین تصاویر باشه چطوری هنگام انتخاب یک متن یا یک تصویر اینارو از هم تشخیص بدیم؟ که ایا متن انتخاب شده یا عکس؟یا اگر عکس انتخاب شده کدوم عکس انتخاب شده.

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

ممنون میشم در این زمینه منو راهنمایی کنید.

meys34
جمعه 22 آبان 1394, 19:24 عصر
سلام

بهتره برای کارتون از HTML و Webbrowser استفاده کنید تا اونجایی که من فهمیدم امکان سرچ کردن یک شی توی ریچ تکست نیست...

میشه به روش هایی فهمید متن انتخابی شامل عکس میشه یا مثلا چند تا عکس توش هست ولی امکان جابجایی تغییر نیست یا خیلی سخته...

البته من خیلی کار نکردم و اطلاعاتم کمه تو این زمینه

به طور کلی متون داخل ریچ تکست به صورت کد هایی مشابه "{\rtf1\ansi\ansicpg1252\uc1" ذخیره میشه...

برای عکس کدش به این شکله:

"{\pict\wmetafile8\picw[N]\pich[N]\picwgoal[N]\pichgoal[N] [BYTES]}

توضیحات بیشتر اینجاست:


http://www.codeproject.com/Articles/4544/Insert-Plain-Text-and-Images-into-RichTextBox-at-R




این کد تعداد عکس های تو متن انتخابی رو میده:
Private Sub Command1_Click()
MsgBox CountChar(RichTextBox1.SelRTF, "\pict")
End Sub

Function CountChar(ByVal Text As String, ByVal Char As String) As Long
Dim V As Variant
V = Split(Text, Char)
CountChar = UBound(V)
End Function


این کد عرض اولین تصویر انتخابی:
Val(Mid$(RichTextBox1.TextRTF, InStr(1, RichTextBox1.TextRTF, "picwgoal") + 8, 20)) / Screen.TwipsPerPixelX

و این کد ارتفاع:
Val(Mid$(RichTextBox1.TextRTF, InStr(1, RichTextBox1.TextRTF, "pichgoal") + 8, 20)) / Screen.TwipsPerPixelY

samiasoft
جمعه 22 آبان 1394, 21:27 عصر
ممنون از راهنمایی شما

حالا بعد از اینکه عرض و ارتفاع رو بدست اوردیم چگونه اون عکس موردنظر رو ارتفاع و عرضش رو تغییر بدیم؟

در مورد مشکل اول هم که در بالا مطرح کردم ایا برای شما هم اینطوریه ؟ (ولی در صورت استفاده از وب بروزر به جای ریچ تکست باکس این مشکل به وجود نمیاد)


یک موردی به ذهنم رسید اینکه الان ما که تونستیم تصویر رو از متن تفکیک کنیم تصویر انتخابی رو ببریم داخل شی پیکچرباکس و بعد از تغییر سایزاون دوباره روی عکس قبلی PASTE کنیم. اینطوری به راحتی عکس ما تغییر سایز میکنه و جایگذاری میشه.

پس الان این سوال مطرح میشه که چگونه عکس انتخاب شده رو ببرم داخل پیکچرباکس؟

Picture1.Picture =.........
قبلا میخواستم به جای ریچ تکست باکس از
Webbrowser استفاده کنم ولی متاسفانه
Webbrowser معایبی خواهد داشت :




- Webbrowserخروجی RTF یا TXT به ما نمیده و مجبورم دوباره محتویاتش رو داخل ریچ تکست باکس بریزم و ازRichTextBoxخروجی بگیرم.
در این حالت خب اگر داخل وب بروز عکس و متن باشه برای انتقال اون به داخل ریچ تکست باکس چگونه عمل کنیم؟ متاسفانه در این حالت هم عکسی که داخل وب بروز باشه حتی با کپی کردن هم داخل ریچ تکست باکس نمیاد!


- همچنین اگر خروجی html بگیریم در خروجی html هم متاسفانه اگر داخل Webbrowser عکس و متن باشه در خروجیش عکسی که ذخیره شده فقط ادرس عکس هست ینی خود عکس رو داخلش ذخیره نمیکنه.(امیدوارم منظورمو رسونده باشم).





برا همین خروجی RichTextBoxبصورت rtf برای اینکار مناسب تر دیدم که همه چی رو داخلش ذخیره میکنه.
اگر وب بروزر هم چنین قابلیتی داشت که خروجی مثل RTF داشت عالی میشد.

vbhamed
شنبه 23 آبان 1394, 07:42 صبح
- Webbrowserخروجی RTF یا TXT به ما نمیده و مجبورم دوباره محتویاتش رو داخل ریچ تکست باکس بریزم و ازRichTextBoxخروجی بگیرم.


اول اینکه وب بروزر خروجی txt میده ولی خب خروجی txt نمیتونه شامل عکس باشه
Dim t!

WebBrowser1.Navigate "www.google.com"

t = Timer
While Timer < t + 0.5: DoEvents: Wend
MsgBox WebBrowser1.Document.DocumentElement.innertext


ضمنا فایلهای html هم می‌تونند شامل عکس درون خودشون باشن که به این مدل می‌گن webarchive و فایلهاش با پسوند mht هستن، برای ایجاد هم می‌تونید از منوی Save As اینترنت اکسپلورر قسمت Save As Type رو روی Web Archive single file (*.mht) بزارید.