PDA

View Full Version : استفاده از تصاویر در TMemo و یا مشابه آن



امید امرایی
جمعه 04 بهمن 1387, 01:42 صبح
با سلام

بنده می خواستم بدونم آیا امکان قرار دادن تصویر در Memo وجود داره یا خیر ؟
اگه بله به چه شکل ؟ و اگه خیر آیا اصولا از روش دیگه ای باید استفاده بشه ؟
و در پایان چطور می شه به طور کلی متون داخل Memo رو تنها در یک خط و یا در یک کلمه Bold کرد و یا تغییر رنگ داد ؟

مهران موسوی
جمعه 04 بهمن 1387, 02:12 صبح
بنده می خواستم بدونم آیا امکان قرار دادن تصویر در Memo وجود داره یا خیر ؟قبلا در انجمن مطرح شده . لطفا جستجو كنيد .


و در پایان چطور می شه به طور کلی متون داخل Memo رو تنها در یک خط و یا در یک کلمه Bold کرد و یا تغییر رنگ داد ؟

TMemo اين توانايي رو در حالت عادي نداره ....

پيشنهاد ميشه از RichEdit يا اگه كلمات خاص رو قصد دارين پر رنگ كنيد از كامپوننت هاي Syntax Highlighter استفاده كنيد . كه اونم مستلزم جستجو در google هست .

امید امرایی
جمعه 04 بهمن 1387, 02:52 صبح
بله
متاسفانه با جستجو در تالار مطالب مرتبطی پیدا نشد
در مورد RichEdit و تغییر استایل متن حق با شماست اما با جستجو در اینترنت هم مطلبی راجع به چگونگی قرار دادن تصویر در اون پیدا نکردم

مهران موسوی
جمعه 04 بهمن 1387, 13:09 عصر
يك كلاس جديد از Tmemo مشتق كن همراه با يك Message به نام WMPaint و بعد در پياده سازي اين Message ميتوني بر روي Memo نقاشي كني ... ولي باز ميگم كه كار معقولانه اي نيست . بهتر هست خودت يك كامپوننت جديد بنويسي كه قابليت بارگذاري تصوير و قابليت Transparent براي Line ها رو داشته باشه ..


type
TMyMemo = class(TMemo)
protected
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
private
procedure PaintImages;
end;


procedure TMyMemo.PaintImages;
var
MCanvas: TControlCanvas;
DrawBounds : TRect;
i, j : Integer;
OriginalRegion : HRGN;
ControlDC : HDC;
begin
MCanvas:=TControlCanvas.Create;
DrawBounds := ClientRect;
try
MCanvas.Control:=Self;
ControlDC := GetDC ( Handle );
MCanvas.Draw(0, 1, Application.Icon);
finally
MCanvas.Free;
end;
end;


procedure TMyMemo.WMPaint(var Message: TWMPaint);
var
MCanvas: TControlCanvas;
DrawBounds : TRect;
Begin
inherited;
MCanvas:=TControlCanvas.Create;
DrawBounds := ClientRect;
Try
MCanvas.Control:=Self;
With MCanvas do
Begin
Brush.Color := clBtnFace;
FrameRect( DrawBounds );
InflateRect( DrawBounds, -1, -1);
FrameRect( DrawBounds );
FillRect ( DrawBounds );
MoveTo ( 33, 0 );
Brush.Color := clWhite;
LineTo ( 33, ClientHeight );
PaintImages;
end;
finally
MCanvas.Free;
End;
end;

امید امرایی
جمعه 04 بهمن 1387, 15:47 عصر
ببخشید بنده نمی خوام نقاشی کنم
فکر می کردم قبلا باید کامپوننتی طراحی شده باشه و معقولانه نباشه بنده دوباره طراحی کنم . صرفا مایل بودم نام کامپوننت رو بدونم .

اما بنده فقط می خوام بتونه تصاویر رو نمایش بده . شاید مشابه اون فرم های یاهو مسنجر باشند که هم قابلیت سفارشی سازی متن رو دارند و هم تصاویر رو نمایش می دند .

vcldeveloper
جمعه 04 بهمن 1387, 17:59 عصر
صرفا مایل بودم نام کامپوننت رو بدونم .
RichView, WebBrowser, RichEdit. البته RichEdit دلفی قابلیت نمایش عکس را نداره، چون با RichEdit 3.0 ویندوز سازگار نیست، ولی باید کامپوننت هایی باشند که بجای RichEdit 2.0، نسخه 3.0 این کنترل ویندوز را Wrap کرده باشند. در هر حال، اگر نخواید از WebBrowser استفاده کنید، بهترین گزینه همان RichView هست که یک کامپوننت تجاری هست.



شاید مشابه اون فرم های یاهو مسنجر باشند که هم قابلیت سفارشی سازی متن رو دارند و هم تصاویر رو نمایش می دند .
یاهو مسنجر از ActiveX مربوط به Internet Explorer برای این کار استفاده میکنه. در دلفی برای همون کار می تونید از کنترل WebBrowser استفاده کنید.

مهران موسوی
جمعه 04 بهمن 1387, 19:05 عصر
ببخشید بنده نمی خوام نقاشی کنم
فکر می کردم قبلا باید کامپوننتی طراحی شده باشه و معقولانه نباشه بنده دوباره طراحی کنم . صرفا مایل بودم نام کامپوننت رو بدونم .

TMemo يك كامپوننت مربوط به نمايش محتواي يك TString هست . نبايد بيش از اين ازش توقع داشت . اون روشي هم كه براي نمايش تصوير در اون بهتون گفتن صرفا به خاطر اين بود كه دقيقا جواب سوال شما رو داده باشم .


بنده می خواستم بدونم آیا امکان قرار دادن تصویر در Memo وجود داره یا خیر ؟

بنده هم RichView رو بهتون پيشنهاد ميكنم . تا بتونيد بهينه تر كارتون رو انجام بديد .

امید امرایی
جمعه 04 بهمن 1387, 19:15 عصر
بله با RichView مشکل حل شد .
ضمن تشکر مجدد از مهران عزیز و جناب کشاورز