Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Delphi 2005 nebo Delphi7 vlozeni smajliku do memo1 richedit1

Ahoj vsem mam dotaz , potreboval bych vedet zda jde do Richedit nebo memo1 komponenty vlozit
obrazek do textu v Richedit lze udelat obarveni textu to neni problem ale jak tam dostat obrazek napadlo mne ze by to mohlo jit pomoci canvas .
Pokud existuje naky web kde by bylo mozno neco si precist beru taky , uz jsem prosel kde co ale vsude je jen ukazka jak to vlozit na pozadi to nepotrebuji.
Vim listbox , treeview, listview maji moznost vlozeni obrazku ale jen na zacatek to taky nechci , potrebuji to nak nacpat do memo1 nebo richedit1.
Vlastni komponentu jsem uvazoval ze bych vytvoril ale nechce se mi ji delat kdyz je mozna moznost to vytvorit v stavajici ale nevim jak to tam nacpat.
Diky moc. :-[

Předmět Autor Datum
Klasicky RichEdit, ktery se pouziva v Delphi vyuziva knihovnu RichEdt.DLL v.1 Ta neumoznuje vkladat…
Jan Fiala 13.02.2006 18:45
Jan Fiala
Opravdu jsem prosel ledasco ale vzdycky jsem skoncil u nedobreho reseni, jinak komponenta TWebbrowse…
virus 13.02.2006 18:53
virus
Ja som našiel jeden tip pre rxRichEdit, neskúšal som: [pas]uses RichEdit; // Stream Callback functi…
pme 13.02.2006 18:54
pme
=pokračovanie= [pas]// Convert Bitmap to RTF Code function BitmapToRTF(pict: TBitmap): string; // b…
pme 13.02.2006 18:54
pme
Do .... ako sa sem vkladá zdroják v pascale/delphi ?3-[
pme 13.02.2006 18:56
pme
len pre doplnenie, mozes pouzit tag code a je tam aj specialne pre pascal. :-)
IgorK 13.02.2006 18:56
IgorK
takto: [pas]function BitmapToRTF(pict: TBitmap): string; // by D3k var bi, bb, rtf: string; bis, bbs…
IgorK 13.02.2006 18:57
IgorK
No však som to skúsil cez tag "PAS" ale v náhľade nič... Prosím vysvetliť polopate :beer:
pme 13.02.2006 18:59
pme
mozno je problem v tom, ze bol prispevok dlhy a uz sa nezmestil uzatvaraci tag code.
IgorK 13.02.2006 19:37
IgorK
[pas]uses Pokus; function Oprava: boolean; var I: integer; begin showmessage('IgorK je super'); end;…
pme 13.02.2006 19:41
pme
;-)
IgorK 13.02.2006 19:57
IgorK
Jeste jsem koukal zde ze to jde i pres streams to se mne hodne libi to bude mozna lepsi reseni , na…
virus 13.02.2006 19:06
virus
Mozno teraz tresnem blbost, neviem, nerobil som s tym ale mal som to v plane. Hral som sa s tym, ale… poslední
Intex 13.02.2006 22:53
Intex

Klasicky RichEdit, ktery se pouziva v Delphi vyuziva knihovnu RichEdt.DLL v.1
Ta neumoznuje vkladat obrazky.
K tomu potrebujes minimalne verzi 2. Ta je implementovana napr. v komponente rxRichEdit
U Memo je to jeste horsi, tam bys musel pouzit uzivatelske vykreslovani a to u Memo je dost tezke...

Ale pokud si vsimnes jakychkoliv programu typu ICQ, Miranda, ..., tak pro zobrazovani textu se nepouzivaji "editacni" komponenty, jako RichEdit nebo Memo, ale ListBox s uzivatelskym vykreslovanim.
Dalsi moznost je generovat HTML kod a zobrazovat pomoci komponenty TWebBrowser, ale bude to pomalejsi

Ja som našiel jeden tip pre rxRichEdit, neskúšal som:
[pas]uses
RichEdit;

// Stream Callback function
type
TEditStreamCallBack = function(dwCookie: Longint; pbBuff: PByte;
cb: Longint; var pcb: Longint): DWORD;
stdcall;

TEditStream = record
dwCookie: Longint;
dwError: Longint;
pfnCallback: TEditStreamCallBack;
end;

// RichEdit Type
type
TMyRichEdit = TRxRichEdit;

// EditStreamInCallback callback function
function EditStreamInCallback(dwCookie: Longint; pbBuff: PByte;
cb: Longint; var pcb: Longint): DWORD; stdcall;
// by P. Below
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);
// by P. Below
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;[/pas]
[mod]Upravil (Jan Fiala)[/mod]

=pokračovanie=

[pas]// Convert Bitmap to RTF Code
function BitmapToRTF(pict: TBitmap): string;
// by D3k
var
bi, bb, rtf: string;
bis, bbs: Cardinal;
achar: ShortString;
hexpict: string;
I: Integer;
begin
GetDIBSizes(pict.Handle, bis, bbs);
SetLength(bi, bis);
SetLength(bb, bbs);
GetDIB(pict.Handle, pict.Palette, PChar(bi)^, PChar(bb)^);
rtf := '{\rtf1 {\pict\dibitmap ';
SetLength(hexpict, (Length(bb) + Length(bi)) * 2);
I := 2;
for bis := 1 to Length(bi) do
begin
achar := Format('%x', [Integer(bi[bis])]);
if Length(achar) = 1 then
achar := '0' + achar;
hexpict[I - 1] := achar[1];
hexpict[I] := achar[2];
Inc(I, 2);
end;
for bbs := 1 to Length(bb) do
begin
achar := Format('%x', [Integer(bb[bbs])]);
if Length(achar) = 1 then
achar := '0' + achar;
hexpict[I - 1] := achar[1];
hexpict[I] := achar[2];
Inc(I, 2);
end;
rtf := rtf + hexpict + ' }}';
Result := rtf;
end;

// Example to insert image from Image1 into RxRichEdit1
procedure TForm1.Button1Click(Sender: TObject);
var
SS: TStringStream;
BMP: TBitmap;
begin
BMP := TBitmap.Create;
BMP := Image1.Picture.Bitmap;
SS := TStringStream.Create(BitmapToRTF(BMP));
try
PutRTFSelection(RxRichEdit1, SS);
finally
SS.Free;
end;
end;[/pas]

[mod]upravil (Jan Fiala)[/mod]

Zpět do poradny Odpovědět na původní otázku Nahoru