问题比较菜,可也不好解决,,,,

mmkill 2004-10-23 08:54:59
在Delphi里有没有一个这样的控件,既能显示文字,又可以很好的显示图片,就象QQ的显示区一样,丰富多彩的显示多种内容。不要告诉我用listbox或者listview啊,这两个操作起来很不爽。用Richtext好象可以,但图片好象不能显示,请高手指教,谢谢。
哎,我要转行了,做软件真是没前途,整天面对垃圾,救命啊!!!
...全文
96 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmkill 2004-10-24
  • 打赏
  • 举报
回复
我觉得还不如pb,pb的richedittext还可以很好的显示图片,,,,
mmkill 2004-10-24
  • 打赏
  • 举报
回复
还说不是垃圾??
type

TMyRichEdit = TRxRichEdit;
这句是干吗的?还不是用的人家的控件?我说的是用Delphi本身的VCL做,有知道的吗????
eastbug 2004-10-24
  • 打赏
  • 举报
回复
richedit完全可以,QQ好像就是用的richedit。
xiyixiaowm50(独孤求败) 已经给你贴出了实现代码。
ghchen 2004-10-24
  • 打赏
  • 举报
回复
up
WGYKING 2004-10-24
  • 打赏
  • 举报
回复
又看到楼上的说这种话
不妥。。。
快乐老猫 2004-10-24
  • 打赏
  • 举报
回复
不是软件垃圾,也不是开发工具垃圾,也不是语言垃圾,而是你的人垃圾,不求甚解,不去看源码,BORLAND的优点就是提供源码。可以去学习。
todouwang 2004-10-23
  • 打赏
  • 举报
回复
richmemo
xiyixiaowm50 2004-10-23
  • 打赏
  • 举报
回复
richedit可以
var

frmMain: TfrmMain;


implementation


{$R *.DFM}

{$R Smiley.res}


uses

RichEdit;


type

TEditStreamCallBack = function(dwCookie: Longint; pbBuff: PByte;

cb: Longint; var pcb: Longint): DWORD;

stdcall;


TEditStream = record

dwCookie: Longint;

dwError: Longint;

pfnCallback: TEditStreamCallBack;

end;


type

TMyRichEdit = TRxRichEdit;


// EditStreamInCallback callback function


function EditStreamInCallback(dwCookie: Longint; pbBuff: PByte;

cb: Longint; var pcb: Longint): DWORD; stdcall;

var

theStream: TStream;

dataAvail: LongInt;

begin

theStream := TStream(dwCookie);

with theStream do

begin

dataAvail := Size - Position;

Result := 0;

if dataAvail <= cb then

begin

pcb := read(pbBuff^, dataAvail);

if pcb <> dataAvail then

Result := UINT(E_FAIL);

end

else

begin

pcb := read(pbBuff^, cb);

if pcb <> cb then

Result := UINT(E_FAIL);

end;

end;

end;


// Insert Stream into RichEdit


procedure PutRTFSelection(RichEdit: TMyRichEdit; SourceStream: TStream);

var

EditStream: TEditStream;

begin

with EditStream do

begin

dwCookie := Longint(SourceStream);

dwError := 0;

pfnCallback := EditStreamInCallBack;

end;

RichEdit.Perform(EM_STREAMIN, SF_RTF or SFF_SELECTION, Longint(@EditStream));

end;


// Load a smiley image from resource


function GetSmileyCode(ASimily: string): string;

var

dHandle: THandle;

pData, pTemp: PChar;

Size: Longint;

begin

pData := nil;

dHandle := FindResource(hInstance, PChar(ASimily), RT_RCDATA);

if dHandle <> 0 then

begin

Size := SizeofResource(hInstance, dHandle);

dhandle := LoadResource(hInstance, dHandle);

if dHandle <> 0 then

try

pData := LockResource(dHandle);

if pData <> nil then

try

if pData[Size - 1] = #0 then

begin

Result := StrPas(pTemp);

end

else

begin

pTemp := StrAlloc(Size + 1);

try

StrMove(pTemp, pData, Size);

pTemp[Size] := #0;

Result := StrPas(pTemp);

finally

StrDispose(pTemp);

end;

end;

finally

UnlockResource(dHandle);

end;

finally

FreeResource(dHandle);

end;

end;

end;


procedure InsertSmiley(ASmiley: string);

var

ms: TMemoryStream;

s: string;

begin

ms := TMemoryStream.Create;

try

s := GetSmileyCode(ASmiley);

if s <> '' then

begin

ms.Seek(0, soFromEnd);

ms.Write(PChar(s)^, Length(s));

ms.Position := 0;

PutRTFSelection(frmMain.RXRichedit1, ms);

end;

finally

ms.Free;

end;

end;


procedure TfrmMain.SpeedButton1Click(Sender: TObject);

begin

InsertSmiley('Smiley1');

end;


procedure TfrmMain.SpeedButton2Click(Sender: TObject);

begin

InsertSmiley('Smiley2');

end;


// Replace a :-) or :-( with a corresponding smiley


procedure TfrmMain.RxRichEdit1KeyPress(Sender: TObject; var Key: Char);

var

sCode, SmileyName: string;


procedure RemoveText(RichEdit: TMyRichEdit);

begin

with RichEdit do

begin

SelStart := SelStart - 2;

SelLength := 2;

SelText := '';

end;

end;


begin

If (Key = ')') or (Key = '(') then

begin

sCode := Copy(RxRichEdit1.Text, RxRichEdit1.SelStart-1, 2) + Key;

SmileyName := '';

if sCode = ':-)' then SmileyName := 'Smiley1';

if sCode = ':-(' then SmileyName := 'Smiley2';

if SmileyName <> '' then

begin

Key := #0;

RemoveText(RxRichEdit1);

InsertSmiley('Smiley1');

end;

end;
mmkill 2004-10-23
  • 打赏
  • 举报
回复
怎么保存,有代码吗?
goodloop 2004-10-23
  • 打赏
  • 举报
回复



Richedit可以的..你搜一下google
yinzhiw 2004-10-23
  • 打赏
  • 举报
回复
DrawGrod控件是否可行

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧