Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.10.2007, 15:58
phoenix
 
Сообщения: n/a
Восклицание проблема со смайлами

Доброго всем времени суток!
Пишу это сообщение любуясь на смайлы форума, которые справа.
Я тоже хочу чтоб у меня были смайлы, но тока в чате написанном на дельфях, юзаю просторы нета 5 день. Посмотрел факью и нашел вот это:

Поместить изображение смайлика в TRxRichEdit

PHP код:
var
   
frmMainTfrmMain;

 
implementation

 
{$R *.DFM}
 {
$R Smiley.res}

 
uses
   RichEdit
;

 
type
   TEditStreamCallBack 
= function(dwCookieLongintpbBuffPByte;
     
cbLongint; var pcbLongint): DWORD;
   
stdcall;

   
TEditStream record
     dwCookie
Longint;
     
dwErrorLongint;
     
pfnCallbackTEditStreamCallBack;
   
end;

 
type
   TMyRichEdit 
TRxRichEdit;

 
// EditStreamInCallback callback function 

function EditStreamInCallback(dwCookieLongintpbBuffPByte;
   
cbLongint; var pcbLongint): DWORDstdcall;
 var
   
theStreamTStream;
   
dataAvailLongInt;
 
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(RichEditTMyRichEditSourceStreamTStream);
 var
   
EditStreamTEditStream;
 
begin
   with EditStream 
do
   
begin
     dwCookie 
:= Longint(SourceStream);
     
dwError := 0;
     
pfnCallback := EditStreamInCallBack;
   
end;
   
RichEdit.Perform(EM_STREAMINSF_RTF or SFF_SELECTIONLongint(@EditStream));
 
end;

 
// Load a smiley image from resource 

function GetSmileyCode(ASimilystring): string;
 var
   
dHandleTHandle;
   
pDatapTempPChar;
   
SizeLongint;
 
begin
   pData 
:= nil;
   
dHandle := FindResource(hInstancePChar(ASimily), RT_RCDATA);
   if 
dHandle <> 0 then
   begin
     Size 
:= SizeofResource(hInstancedHandle);
     
dhandle := LoadResource(hInstancedHandle);
     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(pTemppDataSize);
                 
pTemp[Size] := #0;
                 
Result := StrPas(pTemp);
               
finally
                 StrDispose
(pTemp);
               
end;
             
end;
           
finally
             UnlockResource
(dHandle);
           
end;
       
finally
         FreeResource
(dHandle);
       
end;
   
end;
 
end;

 
procedure InsertSmiley(ASmileystring);
 var
   
msTMemoryStream;
   
sstring;
 
begin
   ms 
:= TMemoryStream.Create;
   try
     
:= GetSmileyCode(ASmiley);
     if 
<> '' then
     begin
       ms
.Seek(0soFromEnd);
       
ms.Write(PChar(s)^, Length(s));
       
ms.Position := 0;
       
PutRTFSelection(frmMain.RXRichedit1ms);
     
end;
   
finally
     ms
.Free;
   
end;
 
end;

 
procedure TfrmMain.SpeedButton1Click(SenderTObject);
 
begin
   InsertSmiley
('Smiley1');
 
end;

 
procedure TfrmMain.SpeedButton2Click(SenderTObject);
 
begin
   InsertSmiley
('Smiley2');
 
end;

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

procedure TfrmMain.RxRichEdit1KeyPress(SenderTObject; var KeyChar);
 var
  
sCodeSmileyNamestring;

   
procedure RemoveText(RichEditTMyRichEdit);
   
begin
     with RichEdit 
do
     
begin
       SelStart 
:= SelStart 2;
       
SelLength := 2;
       
SelText :=  '';
     
end;
   
end;

 
begin
  
If (Key ')') or (Key '(')  then
  begin
    sCode 
:= Copy(RxRichEdit1.TextRxRichEdit1.SelStart-12) + Key;
    
SmileyName := '';
    if 
sCode ':-)'  then SmileyName := 'Smiley1';
    if 
sCode ':-('  then SmileyName := 'Smiley2';
    if 
SmileyName <> '' then
    begin
      Key 
:= #0;
      
RemoveText(RxRichEdit1);
      
InsertSmiley('Smiley1');
    
end;
  
end;
 
end

сделал как тут, компилится без ошибок (ну понятно что все компоненты стоят ), но при нажатии на SpeedButton2 и SpeedButton1 ничего не происходит. Файл ресурсов слинкован правильно. Что делать не знаю помогите....

Большая просьба, тем кто может накидайте примерчик и киньте на мыло dr.vampir@rambler.ru буду признателен.
или объясните или приведите пример, как вставить смайлы в RxRichEdit другими методами, можно даже просто без файлов ресурсов.

PS: ребят ну пожалуйста не посылайте дальше меня искать и тд. просто помогите по человечески.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:51.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025