Richeditte formatlı bir satırı başka richedite kopyalamak !!
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Richeditte formatlı bir satırı başka richedite kopyalamak !!
Richeditteki mesela 3. satırı formatını koruyarak (Kalın italik vs) başka bir richedite eklemem lazım.
Richediti stream kullanarak komple formatlı ekleyebiliyorum,
Fakat sadece falanca satır olunca işler karışıyor.
Var mıdır deneyen paylaşacak olan arkadaş_?
Başarılar.
Richediti stream kullanarak komple formatlı ekleyebiliyorum,
Fakat sadece falanca satır olunca işler karışıyor.
Var mıdır deneyen paylaşacak olan arkadaş_?
Başarılar.
En son poke53280 tarafından 31 Mar 2006 02:14 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Merhaba,
richedit1 in fontunu times new roman ,size 14 ,style inin fsbold,fsitalik değerlerini true olarak ayarladıktan sonra 6-7 satırlık bir yazı yazın.
richedit2 ye hiç karışmayın. daha sonra aşağıdaki programcığı bi çalıştırın işinize yaracak mı?
Button1 in onclick ine aşağıdakini ekleyin.
Kolay gelsin.
richedit1 in fontunu times new roman ,size 14 ,style inin fsbold,fsitalik değerlerini true olarak ayarladıktan sonra 6-7 satırlık bir yazı yazın.
richedit2 ye hiç karışmayın. daha sonra aşağıdaki programcığı bi çalıştırın işinize yaracak mı?
Button1 in onclick ine aşağıdakini ekleyin.
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
var
eski:tfont;
begin
eski:=tfont.Create;
eski.Assign(richedit2.SelAttributes);
richedit2.SelAttributes.Assign(richedit1.SelAttributes);
richedit2.lines.add(richedit1.Lines[2]);
showmessage('durdum') ;
richedit2.SelAttributes.Assign(eski);
showmessage(richedit2.Font.Name);
richedit2.Lines.Add('son eklenen');
richedit2.Lines.Add('son2 eklenen');
end;
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Logo Go özel eğitim, web tasarım, teknik servis
Merhaba,
@poke53280 stream i kullandığını söylemiş Aşağıdaki resime göre stream
http://www.hemenpaylas.com/download/443 ... e.bmp.html
aşağıdaki kodları oluşturuyor.
Mesela yukarıdaki örnekte kırpıp aşağıdaki şekle sokarsanız.
2. satır olan yalçın doğru olarak kopyalanır.
Kolay gelsin.
Haklısınız dediğinize göre hatalı aktarım yapıyor.ylmz yazdı:merhaba,
richedit2 de seçili olan alanda iki ayrı font kullanıldıysa ne olacak.Mesela ilk seçili harf "F" sarı, ikinci harf "B" lacivert ise ....
@poke53280 stream i kullandığını söylemiş Aşağıdaki resime göre stream
http://www.hemenpaylas.com/download/443 ... e.bmp.html
aşağıdaki kodları oluşturuyor.
eğer clipboardı kullanmamaya kararlı iseniz. yukarıdakilerin bır kısmını kırparak istediğinizi alabilirsiniz.{\rtf1\ansi\ansicpg1254\deff0\deflang1055{\fonttbl{\f0\fnil\fcharset162{\*\fname Times New Roman;}Times New Roman TUR;}{\f1\fnil\fcharset162 Microsoft Sans Serif;}}
{\colortbl ;\red255\green0\blue255;\red255\green0\blue0;\red0\green128\blue128;}
\viewkind4\uc1\pard\b\i\f0\fs28 Ahmet
\par h\cf1\b0\i0\f1\fs24 aka\cf0\b\i\f0\fs28 n
\par \cf2 y\cf0 al\cf3 c\cf0\'fdn
\par ramazan
\par sait
\par mahmut
\par fatih
\par
\par }
Mesela yukarıdaki örnekte kırpıp aşağıdaki şekle sokarsanız.
2. satır olan yalçın doğru olarak kopyalanır.
style ler işi karıştırmasa daha kolay yapılır. Ama bir style her satırda tekrarlanmıyor. Örneğin 1.satırda bold var ise 5.satıra kadar \b olmuyor. Bu yüzden 5. satırı doğru kopyalayabilmek için 1. satıra kadar kontrol etmek gerekir.{\rtf1\ansi\ansicpg1254\deff0\deflang1055{\fonttbl{\f0\fnil\fcharset162{\*\fname Times New Roman;}Times New Roman TUR;}{\f1\fnil\fcharset162 Microsoft Sans Serif;}}
{\colortbl ;\red255\green0\blue255;\red255\green0\blue0;\red0\green128\blue128;}
\viewkind4\uc1\pard\b\i\f0\fs28 \cf2 y\cf0 al\cf3 c\cf0\'fdn
}
Kolay gelsin.
En son ofenX tarafından 10 Nis 2006 06:45 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Logo Go özel eğitim, web tasarım, teknik servis
Evet,
@ylmz nin eleştrileri sayesinde sanırım doğru çözüme gidiyoruz.
Aşağıdaki kodu bir deneyin. Diğerine benziyor ama yöntem şöyledir.
a) önce istenen satır düz şekilde diğer richedit in sonuna ekleniyor.
b)sonra ilk richedit te istediğimiz satırın en başına geliyoruz.
c)ikinci richeditte kopyaladığımızın başına geliyoruz.
d)bitene kadar font özelliklerini atıyoruz.
Burada @ylmz ın dediklerini onaylamak için
3.satıra ramazan yazmıştım.
ra :times new roman, 14 punto ,italik ,bold,siyah renk
maz :ms sanserif ,12 punto ,normal,kırmızı renk,
an :times new roman ,14 punto ,italik,bold,yeşil renk
yaptım. Bana mısın? demedi.
Kolay gelsin.
@ylmz nin eleştrileri sayesinde sanırım doğru çözüme gidiyoruz.
Aşağıdaki kodu bir deneyin. Diğerine benziyor ama yöntem şöyledir.
a) önce istenen satır düz şekilde diğer richedit in sonuna ekleniyor.
b)sonra ilk richedit te istediğimiz satırın en başına geliyoruz.
c)ikinci richeditte kopyaladığımızın başına geliyoruz.
d)bitene kadar font özelliklerini atıyoruz.
Kod: Tümünü seç
procedure TForm1.Button6Click(Sender: TObject);
var
K,i: integer;
BAS,UZUNLUK:INTEGER;
S:STRING;
begin
BAS:=RICHEDIT1.Perform(EM_LINEINDEX,3,0);
UZUNLUK:=LENGTH(RICHEDIT1.Lines[3]);
RICHEDIT2.Lines.ADD(RICHEDIT1.Lines[3]);
K:=0;
for i := BAS to BAS+UZUNLUK do
begin
RichEdit1.SelStart := i;
RichEdit1.SelLength := 1;
RichEdit2.SelStart :=LENGTH(RICHEDIT2.TEXT)-LENGTH(RICHEDIT1.Lines[3])-2+K;
RichEdit2.SelLength := 1;
K:=K+1;
RICHEDIT2.SelAttributes := RichEdit1.SelAttributes;
end;
end;
3.satıra ramazan yazmıştım.
ra :times new roman, 14 punto ,italik ,bold,siyah renk
maz :ms sanserif ,12 punto ,normal,kırmızı renk,
an :times new roman ,14 punto ,italik,bold,yeşil renk
yaptım. Bana mısın? demedi.

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Logo Go özel eğitim, web tasarım, teknik servis
-
- Üye
- Mesajlar: 508
- Kayıt: 30 Oca 2004 10:49
Soru : Bir richediti diğerine nasıl kopyalarız?
Kod: Tümünü seç
type
TEditStreamCallBack = function(dwCookie: Longint; pbBuff: PByte;
cb: Longint; var pcb: Longint): DWORD; stdcall;
TEditStream = record
dwCookie: Longint;
dwError: Longint;
pfnCallback: TEditStreamCallBack;
end;
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; {assume everything is ok}
if dataAvail <= cb then
begin
pcb := Read(pbBuff^, dataAvail);
if pcb <> dataAvail then {couldn't read req. amount of bytes}
result := E_FAIL;
end
else
begin
pcb := Read(pbBuff^, cb);
if pcb <> cb then
result := E_FAIL;
end;
end;
end;
function EditStreamOutCallback(dwCookie: Longint; pbBuff: PByte; cb:
Longint; var pcb: Longint): DWORD; stdcall;
var
theStream: TStream;
begin
theStream := TStream(dwCookie);
with theStream do
begin
if cb > 0 then
pcb := Write(pbBuff^, cb);
Result := 0;
end;
end;
procedure GetRTFSelection(aRichEdit: TRichEdit; intoStream: TStream);
var
editstream: TEditStream;
begin
with editstream do
begin
dwCookie := Longint(intoStream);
dwError := 0;
pfnCallback := EditStreamOutCallBack;
end;
aRichedit.Perform(EM_STREAMOUT, SF_RTF or SFF_SELECTION, longint(@editstream));
end;
procedure PutRTFSelection(aRichEdit: TRichEdit; sourceStream: TStream);
var
editstream: TEditStream;
begin
with editstream do
begin
dwCookie := Longint(sourceStream);
dwError := 0;
pfnCallback := EditStreamInCallBack;
end;
aRichedit.Perform(EM_STREAMIN, SF_RTF or SFF_SELECTION, longint(@editstream));
end;
procedure InsertRTF(aRichEdit: TRichEdit; s: string);
var
aMemStream: TMemoryStream;
begin
if Length(s) > 0 then
begin
aMemStream := TMemoryStream.Create;
try
aMemStream.Write(s[1], length(s));
aMemStream.Position := 0;
PutRTFSelection(aRichEdit, aMemStream);
finally
aMemStream.Free;
end;
end;
end;
procedure CopyRTF(aSource, aDest: TRichEdit);
var
aMemStream: TMemoryStream;
begin
aMemStream := TMemoryStream.Create;
try
GetRTFSelection(aSource, aMemStream);
aMemStream.Position := 0;
PutRTFSelection(aDest, aMemStream);
finally
aMemStream.Free;
end;
end;