richedit
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
richedit
Arkadaşlar. bir porg. hazırlayacağım. diyelimki paradoksta adı soyadı ozel diye 3 alan var. özeli ricedite bağlayacağım.ve edit1 in changesine aşağıdaki koduyazacağım.
table1.Filter:='ozel>='''+edit1.Text+''''+' and ozel<='''+edit1.Text+'·''';
table1.Filtered:=true;
edit1 e yazdığım kelime riceditlerde geçiyorsa o kayıtları filtrelesin. ve filtrelenen riceditlerdeki geçen kelimeler renkli olarak görünsün. saygılar.
table1.Filter:='ozel>='''+edit1.Text+''''+' and ozel<='''+edit1.Text+'·''';
table1.Filtered:=true;
edit1 e yazdığım kelime riceditlerde geçiyorsa o kayıtları filtrelesin. ve filtrelenen riceditlerdeki geçen kelimeler renkli olarak görünsün. saygılar.
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.
Hz.Muhammed (S.A.V.)

Hz.Muhammed (S.A.V.)


viewtopic.php?p=9908#9908
benzeri bir yöntem ile renklendirme yapabilirsiniz
denedim
ordaki kodu denedim ancak sadece aktif richeditten buluyor ancak ben tüm veri tabanındaki richeditlerden aramak istiyorum. ve ricehitte geçen kelimelerin renkli olmasını istiyorum. 11 kb lık elimde bir uygulama var size gönderebilirmiyim. bir bakabilirmisiniz
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.
Hz.Muhammed (S.A.V.)

Hz.Muhammed (S.A.V.)

Formun üzerinde adı Hhjghj olan memo bir alana sahip xx1 isimli tablo +query var;
extra bir richedit cabası
extra bir richedit cabası

Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
var
I, J, PosReturn, SkipChars: Integer;
begin
query1.SQL.Clear;
query1.SQL.Add('Select * From xx1' );
query1.SQL.Add('where 1=1' );
//query1.SQL.Add('and Hhjghj LIKE ''%'+edit1.Text+'''' );
query1.open;
RichEdit1.Lines.Clear;
RichEdit1.Lines.Add( Query1.FieldByName('Hhjghj').AsString);
for I := 0 to RichEdit1.Lines.Count do
begin
PosReturn := Pos(Edit1.Text,RichEdit1.Lines[I]);
if PosReturn <> 0 then {found!}
begin
SkipChars := 0;
for J := 0 to I - 1 do
SkipChars := SkipChars + Length(RichEdit1.Lines[J]);
SkipChars := SkipChars + (I*2);
SkipChars := SkipChars + PosReturn - 1;
RichEdit1.SetFocus;
RichEdit1.SelStart := SkipChars;
RichEdit1.SelLength := Length(Edit1.Text);
RichEdit1.SelAttributes.Style:=[fsBOLD];
RichEdit1.SelAttributes.Color:=ClRed;
RichEdit1.SelLength := 0;
end;
end;
end;
DENEDİM
MEGE KARDEŞ DENEDİM BENİM İSTEDİĞİM KAYITLARI BULUNCA TÜM VERİ TABANINDA ARAYACAK SADECE AKTİF RİCEDİTTE DEĞİL TÜM VERİ TABANININ RİCEDİT ALANINDA ARAYIP EDİT1 DE GEÇEN KELİMELER VARSA EĞER SADECE O RİCEDİT KAYITLARI GÖRÜNSÜN FİLTRELENSİN DİĞERLERİ GÖRÜNMESİN VE FİLTRELİ OLAN RİCEDİTLERDE ARANAN KELİME KIRMIZI RENKLİ GÖRÜNEBİLİR. SAYGILAR. ÖRNEĞİ GÖNDERSEYDİM DAHA İYİ SORUMU ANLAYABİLİRDİN DİYE DÜŞÜNÜYORUM.
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.
Hz.Muhammed (S.A.V.)

Hz.Muhammed (S.A.V.)

son
son yazdığınız kodu // kaldırıp aktifleştirip edit1 e yazdığım kodu bulmaya çalıştığımda riceditin içini boş gösteriyor
estafurullah hocam sizin gibi güzel insanlara bağırılırmı

Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.
Hz.Muhammed (S.A.V.)

Hz.Muhammed (S.A.V.)

internet ortamında mesajın tamamını büyük harfle yazmak karşıdakine bağırmak/kızmak manasına gelir. (bkz : Forum Kuralları
)
Kolay gelsin.

Kolay gelsin.
En son mussimsek tarafından 01 Nis 2004 11:40 tarihinde düzenlendi, toplamda 1 kere düzenlendi.

Kuri_TLJ yazdı: Bildiğim ve denediğim kadarı ile paradox'ta Memo field'lar için LIKE kullanımı sözkonusu değil. Bunun yerine farklı bir metod uygulayıp yapabilirsin. Memo Field'ı kelimlere parçalayıp bir yardımcı table'a sıra ile bu memofielddaki kelimleri Insert edersin ve her insert ettiğin kelimenin hangi record'taki memofielddan alındığını belirtmek için bir Key alan tutarsın.
viewtopic.php?p=3007#3007
Selam...
şeklinde bir deneyin... Değişiklik başında ve sonunda % işareti olması..
Kod: Tümünü seç
Query1.SQL.Add('and ozel LIKE ''%'+edit1.Text+'%''' );
En son mrmarman tarafından 01 Nis 2004 01:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
- Bu duruma sinir oldum ve deneyip kendim görmek istedim...mege yazdı:kötü haber
[Kuri_TLJ demiş ki: ]
Bildiğim ve denediğim kadarı ile paradox'ta Memo field'lar için LIKE kullanımı sözkonusu değil. Bunun yerine farklı bir metod uygulayıp yapabilirsin. Memo Field'ı kelimlere parçalayıp bir yardımcı table'a sıra ile bu memofielddaki kelimleri Insert edersin ve her insert ettiğin kelimenin hangi record'taki memofielddan alındığını belirtmek için bir Key alan tutarsın.
viewtopic.php?p=3007#3007
- @Kuri_TLJ denemelerinde yanılmış... Paradox memo alanda Like ile sorgu yapmaya izin veriyor...
- Database Desktop yardımıyla bir table oluşturdum...
Kod: Tümünü seç
Kayno : Numeric (*)
Adi : Alphanumeric (20)
Konu : Memo (150)
- En son olarak forma bir adet TEdit ekleyip, DBGrid'in datasource'unu Query'ninkini gösterdim ve aşağıdaki sorguyu hazırlayıp butona atadım..
Kod: Tümünü seç
With Query1 do
begin
Active := False;
SQL.Clear;
SQL.Add('Select * from "D:\Delphi\DelphiTurk\Paradox Memo SQL sorgu\data.db"');
SQL.Add('Where 1=1');
SQL.Add('and Konu like '+QuotedStr('%'+Edit1.Text+'%'));
Active := True;
end;
selamlar.mrmcop yazdı:Bu duruma sinir oldum ve deneyip kendim görmek istedim...
bende şaşırdım. Memo alanlar üzerinde arama yapabiliyor, ama formatted memo (F)üzerinde yapamıyor. bende standart yerine formatted kullannmıştım. problem bundan kaynaklanmış.
pardon acele cevap veren ecele gider

ayrıca kodda bir kaç hata daha var
- if PosReturn <> 0 then {found!} yerine while not ile yapı kurulmalı yoksa her satırda tek cevap bulur.
- RichEdit1.Lines.Add( Query1.FieldByName('Hhjghj').AsString); buda memonun wordwrap true ise ilk satırını alıyor döngü ile kontrol edilmeli.
- her neyse birazdan tamamını düzeltirim

Arkadaşlar Şöyle bir kod ile Kayıtlarımı Filtrelemeyi başardım ancak bulunan kayıtların içinde diyelimki polis kelimesini aradım filtrelenen kayıtların içinde richeditte geçen polis kelimeleri kırmızı renkli olmalı. filtreleme işini şöyle yaptım.
query1 in sql sine
select * from data
where ozel like
zel
paramsını string yaptım
editin changesine ise
procedure TForm1.Edit1Change(Sender: TObject);
begin
if edit1.Text > '' then
begin
Query1.Close;
Query1.ParamByName('ozel').AsString := '%' +Edit1.Text + '%';
Query1.Open;
DbGrid2.DataSource := dataSource2;
dbrichedit1.DataSource:= dataSource2;
tabsheet2.caption:=('Bulunan Kayıt: '+inttostr(query1.RecordCount));
end else
begin
Query1.Close; // veriyi gıncelle
table1.Open;
Dbrichedit2.DataSource := datasource1;
dbrichedit2.DataSource:= datasource1;
end;
end;
bu kod çok pratik oldu. şimdi burda richeditteki kayıtları buldum. ancak bulunan diyelimki polis kelimesi geçen kayıtlar filtrelendi bu polis kelimelerini kırmızı renkli nasıl yapabilirim.
query1 in sql sine
select * from data
where ozel like

paramsını string yaptım
editin changesine ise
procedure TForm1.Edit1Change(Sender: TObject);
begin
if edit1.Text > '' then
begin
Query1.Close;
Query1.ParamByName('ozel').AsString := '%' +Edit1.Text + '%';
Query1.Open;
DbGrid2.DataSource := dataSource2;
dbrichedit1.DataSource:= dataSource2;
tabsheet2.caption:=('Bulunan Kayıt: '+inttostr(query1.RecordCount));
end else
begin
Query1.Close; // veriyi gıncelle
table1.Open;
Dbrichedit2.DataSource := datasource1;
dbrichedit2.DataSource:= datasource1;
end;
end;
bu kod çok pratik oldu. şimdi burda richeditteki kayıtları buldum. ancak bulunan diyelimki polis kelimesi geçen kayıtlar filtrelendi bu polis kelimelerini kırmızı renkli nasıl yapabilirim.
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.
Hz.Muhammed (S.A.V.)

Hz.Muhammed (S.A.V.)

Selam...
- @hacikisi özel mesajını sadece örnek oluşturduğun veritabanını incelemek adına kabul ettim... Herkesin paylaşması adına cevabı buradan bildirmeyi yeğliyorum...
- Biraz inceleyince sorunun kaynağı ortaya çıktı...
- Problemin kaynağı @mege dediğin gibi formatted memo alan / RichEdit kullanmak...
Türk Öğün Çalış Güven
kaydın aslında veritabanında aşağıdaki şekilde saklanıyor...
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset162 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}
\viewkind4\uc1\pard\lang1055\f0\fs16 T\'fcrk \'d6\'f0\'fcn \'c7al\'fd\'fe G\'fcven\f1
\par }
- Hatta istersen aramak için ven yazıp button'a bas... Sana kayıtları bulup getirecektir...
- Problemi anlatabilmişimdir sanırım... Burada Türk yerine T\'fcrk görüyorsun... SQL bunu bu şekilde ararsa bulabilir...
- Bu noktada da başka bir problem karşına çıkıyor. Tek tırnak işareti.
- SQL ile arama yaptırırken '%Türk%' şeklinde arama yaptırmak lazım gelir ve bu şekilde bulur... RTF dönüşümünü yaptığında ise arama kriteri şöyle olacak... '%T\'fcrk%'. İşte ortadaki tek tırnağın neye ait olduğu SQL tarafından bilinemiyor...
- String ifadelerde yabancı karakterler RTF'ye kodlanarak dönüşüyor...
- Benzer durumlar için bir fonksiyon hazırlamıştım... Türkçe harfleri karşılaştırıp RTF formatına dönüştüren...
- DBRichEdit'in PlainText özelliğini True yaparsan normal Memo gibi kaydetmesini sağlamış olursun... Bu şekilde kayıtlarını yaparsan daha önceki cevaplarda bildirildiği gibi normal arama procedurün çalışır...
- Bu aşamada eğer RichEdit konusunda ısrar edersen, aramayı SQL ile değil bir döngü ile yapmak zorunluluğu doğmakta... Veya
- Yine @mege'nin dediği gibi WordWrap özelliğine dikkat edersen, verdiğim fonksiyon ile de RTF içerisinden arama yaptırman mümkün...
- Geçici çözüm buldum dediğin şekilde de sadece ingilizce harflerle yazılmış standart kelimeleri bulabilirsin... Eğer Türkçe harfleri de bulsun istersen...
- Kodu gibi yapmalısın...
- @hacikisi özel mesajını sadece örnek oluşturduğun veritabanını incelemek adına kabul ettim... Herkesin paylaşması adına cevabı buradan bildirmeyi yeğliyorum...
- Biraz inceleyince sorunun kaynağı ortaya çıktı...
- Problemin kaynağı @mege dediğin gibi formatted memo alan / RichEdit kullanmak...
Türk Öğün Çalış Güven
kaydın aslında veritabanında aşağıdaki şekilde saklanıyor...
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset162 MS Sans Serif;}{\f1\fnil MS Sans Serif;}}
\viewkind4\uc1\pard\lang1055\f0\fs16 T\'fcrk \'d6\'f0\'fcn \'c7al\'fd\'fe G\'fcven\f1
\par }
- Hatta istersen aramak için ven yazıp button'a bas... Sana kayıtları bulup getirecektir...
- Problemi anlatabilmişimdir sanırım... Burada Türk yerine T\'fcrk görüyorsun... SQL bunu bu şekilde ararsa bulabilir...
- Bu noktada da başka bir problem karşına çıkıyor. Tek tırnak işareti.
- SQL ile arama yaptırırken '%Türk%' şeklinde arama yaptırmak lazım gelir ve bu şekilde bulur... RTF dönüşümünü yaptığında ise arama kriteri şöyle olacak... '%T\'fcrk%'. İşte ortadaki tek tırnağın neye ait olduğu SQL tarafından bilinemiyor...
- String ifadelerde yabancı karakterler RTF'ye kodlanarak dönüşüyor...
Kod: Tümünü seç
Ç: \'c7
İ: \'dd
Ö: \'d6
Ş: \'de
Ü: \'dc
Ğ: \'d0
ç: \'e7
ı: \'fd
ö: \'f6
ş: \'fe
ü: \'fc
ğ: \'f0
Kod: Tümünü seç
Function RtfYap(Yazi:String):String;
begin
Yazi := StringReplace( Yazi, 'Ç', '\''c7', [rfReplaceAll] );
Yazi := StringReplace( Yazi, 'İ', '\''dd', [rfReplaceAll] );
Yazi := StringReplace( Yazi, 'Ö', '\''d6', [rfReplaceAll] );
Yazi := StringReplace( Yazi, 'Ş', '\''de', [rfReplaceAll] );
Yazi := StringReplace( Yazi, 'Ü', '\''dc', [rfReplaceAll] );
Yazi := StringReplace( Yazi, 'Ğ', '\''d0', [rfReplaceAll] );
Yazi := StringReplace( Yazi, 'ç', '\''e7', [rfReplaceAll] );
Yazi := StringReplace( Yazi, 'ı', '\''fd', [rfReplaceAll] );
Yazi := StringReplace( Yazi, 'ö', '\''f6', [rfReplaceAll] );
Yazi := StringReplace( Yazi, 'ş', '\''fe', [rfReplaceAll] );
Yazi := StringReplace( Yazi, 'ü', '\''fc', [rfReplaceAll] );
Yazi := StringReplace( Yazi, 'ğ', '\''f0', [rfReplaceAll] );
Result := Yazi;
end;

- Bu aşamada eğer RichEdit konusunda ısrar edersen, aramayı SQL ile değil bir döngü ile yapmak zorunluluğu doğmakta... Veya
- Yine @mege'nin dediği gibi WordWrap özelliğine dikkat edersen, verdiğim fonksiyon ile de RTF içerisinden arama yaptırman mümkün...
- Geçici çözüm buldum dediğin şekilde de sadece ingilizce harflerle yazılmış standart kelimeleri bulabilirsin... Eğer Türkçe harfleri de bulsun istersen...
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
begin
With Query1 do
begin
Active := False;
SQL.Clear;
SQL.Add('Select * from "c:\richedit\data\data.db"');
SQL.Add('Where 1=1');
SQL.Add('and ozel like :arama');
ParamByName('arama').AsString := '%'+RtfYap(Edit1.Text)+'%';
Button1.Caption := ParamByName('arama').AsString;
Active := True;
end;
end;
mrmcop
sayın mrmcop yanıt için teşekkür ederim. yanlız bir üstteki mesajımı incelerseniz params değeri ayarlayarak kayıt bulma işini bir şekilde halletmiştim. sizi yorduğum için çok teşekkür ederim. ancak bu aşamada problemimin 2. ve son aşamasını yapmama yardımcı olurmusunuz. şu şekilde. bulduğum kayıtları filtreledim. bu filtrelenen kayıtların içindendiyelimki richeditteki polis geçen kelimeler bulunarak filtrelenmişti. şimdi bu filtrelenmiş haliyle richeditteki tüm polis kelimelerini nasıl renkli yapabilirim. Saygılar Sunuyorum.
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.
Hz.Muhammed (S.A.V.)

Hz.Muhammed (S.A.V.)
