richedit

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
hacikisi
Üye
Mesajlar: 64
Kayıt: 24 Şub 2004 07:29
Konum: Gaziantep

richedit

Mesaj gönderen hacikisi »

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.
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.

Hz.Muhammed (S.A.V.)
Resim
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

:idea: calculated alan oluşturup oradaki metin içerisine bulduğunuz kayıdı aktarıp;
viewtopic.php?p=9908#9908
benzeri bir yöntem ile renklendirme yapabilirsiniz
hacikisi
Üye
Mesajlar: 64
Kayıt: 24 Şub 2004 07:29
Konum: Gaziantep

denedim

Mesaj gönderen hacikisi »

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.)
Resim
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

Formun üzerinde adı Hhjghj olan memo bir alana sahip xx1 isimli tablo +query var;
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;
hacikisi
Üye
Mesajlar: 64
Kayıt: 24 Şub 2004 07:29
Konum: Gaziantep

DENEDİM

Mesaj gönderen hacikisi »

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.)
Resim
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

hocam bağırmayın burda çocuk uyuyor,uyanırsa ağlar :D

dediğiniz gibi attachmentle ilgili biraz alerjim var. ben anllattığınızdan hala benim yaptığımı anlıyorum;

//query1.SQL.Add('and Hhjghj LIKE ''%'+edit1.Text+'''' ); e bi dikkat
hacikisi
Üye
Mesajlar: 64
Kayıt: 24 Şub 2004 07:29
Konum: Gaziantep

son

Mesaj gönderen hacikisi »

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.)
Resim
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

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.
En son mussimsek tarafından 01 Nis 2004 11:40 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

:!: kötü haber
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
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam...

Kod: Tümünü seç

    Query1.SQL.Add('and ozel LIKE ''%'+edit1.Text+'%''' );
şeklinde bir deneyin... Değişiklik başında ve sonunda % işareti olması..
En son mrmarman tarafından 01 Nis 2004 01:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

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
- Bu duruma sinir oldum ve deneyip kendim görmek istedim...

- @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)
- Sonra forma eklediğim DBGrid ile DBMemo yardımıyla kayıtlar girdim...

- 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;
- Edit içine ne yazarsam yazayım memo içinde varsa bulup o kaydı listeledi...
Resim
Resim ....Resim
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

mrmcop yazdı:Bu duruma sinir oldum ve deneyip kendim görmek istedim...
selamlar.
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 :oops:

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 :D
hacikisi
Üye
Mesajlar: 64
Kayıt: 24 Şub 2004 07:29
Konum: Gaziantep

Mesaj gönderen hacikisi »

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 :ozel
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.)
Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

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...

Kod: Tümünü seç

Ç: \'c7
İ: \'dd
Ö: \'d6
Ş: \'de
Ü: \'dc
Ğ: \'d0

ç: \'e7
ı: \'fd
ö: \'f6
ş: \'fe
ü: \'fc
ğ: \'f0
- 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...

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;
- 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... :idea:

- 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;
- Kodu gibi yapmalısın...
Resim
Resim ....Resim
hacikisi
Üye
Mesajlar: 64
Kayıt: 24 Şub 2004 07:29
Konum: Gaziantep

mrmcop

Mesaj gönderen hacikisi »

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.)
Resim
Cevapla