richedit
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- Mesajımı eksik okudunuz anlaşılan... Mesajımda Türkçe harf araması yaparsanız bulamayacağınızı bildirmiştim...
- İsterseniz deneyin... polis değil de Türk kelimesini aratın bakalım bulabilecek mi ...
- Bulamayacaktır. Sebebini ise uzunca bir mesaj yazdım size bunun sebebini kavrayın diye... Lütfen tekrar okuyunuz...
- İsterseniz deneyin... polis değil de Türk kelimesini aratın bakalım bulabilecek mi ...
- Bulamayacaktır. Sebebini ise uzunca bir mesaj yazdım size bunun sebebini kavrayın diye... Lütfen tekrar okuyunuz...
- Sen cevabı arayadur, RichEdit'in renklerini değiştirmek için sorduğun sorunun cevabını vereyim aslında Delphi'nin help'inde mevcut...
- DBRichEdit üzerinde değişiklik yapmak istersen, kaydı etkiler... Forma başka normal bir RichEdit koyup, DataSource'un DataChange olayında DBRichEdit'in Text'ini aktarırsın... Kullanıcı görsel olarak burada işlemlerini yürütür...
- DBRichEdit üzerinde değişiklik yapmak istersen, kaydı etkiler... Forma başka normal bir RichEdit koyup, DataSource'un DataChange olayında DBRichEdit'in Text'ini aktarırsın... Kullanıcı görsel olarak burada işlemlerini yürütür...
Kod: Tümünü seç
Procedure TForm1.Renklendir(Rich:TRichEdit);
var
Bulundu, Baslangic, Sonu: Integer;
begin
With Rich do
begin
Text := DBRichEdit1.Text;
SelectAll;
SelAttributes.Style := SelAttributes.Style-[fsBold];
SelAttributes.Color := clBlack;
SelStart := 0;
Bulundu := 0;
Baslangic := 0;
Sonu := Length(Text) - Baslangic;
Bulundu := FindText(Edit1.Text, Baslangic, Sonu, [stMatchCase]);
if Bulundu <> -1 then
begin
SetFocus;
SelStart := Bulundu;
SelLength := Length(Edit1.Text);
SelAttributes.Style := [fsBold];
SelAttributes.Color := clGreen;
end;
end; // With Rich
DBGrid1.SetFocus;
end;
Arkadaşlar paradoxta memo alanlarda like kullanımı konusu doğrusu bana çok yardımcı oldu. Daha önce denedim ama başaramamıştım.
Bulduğun alanları şöyle renklendirebilirsin
with richedit1 do
begin
if sellength <>0 then
startpos:=selstart+sellength
else
startpos:=selstart;
toend:=length(text)-startpos;
foundat:=findtext('polis',startpos,toend,[]);
if foundat <> -1 then
begin
selstart:=foundAt;
sellength:=length('polis');
selattributes.color:=clred;
end;
Bulduğun alanları şöyle renklendirebilirsin
with richedit1 do
begin
if sellength <>0 then
startpos:=selstart+sellength
else
startpos:=selstart;
toend:=length(text)-startpos;
foundat:=findtext('polis',startpos,toend,[]);
if foundat <> -1 then
begin
selstart:=foundAt;
sellength:=length('polis');
selattributes.color:=clred;
end;
Bilgi paylaşıldıkça güzeldir.
sayın mrmcop:
Procedure TForm1.Renklendir(Rich:TRichEdit);
var
Bulundu, Baslangic, Sonu: Integer;
diye devam eden prosedürü ekleyip run ettiğinde Tform1.renklendir burda hata gösteriyor. Eksik Birşeylermi yaptık acaba
Procedure TForm1.Renklendir(Rich:TRichEdit);
var
Bulundu, Baslangic, Sonu: Integer;
diye devam eden prosedürü ekleyip run ettiğinde Tform1.renklendir burda hata gösteriyor. Eksik Birşeylermi yaptık acaba
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.
Hz.Muhammed (S.A.V.)

Hz.Muhammed (S.A.V.)

form dahilinde procedure olusturmayı biliyorsanız yukarıdakileri rahatlıkla yapabilirsiniz
eger bilmiyorsanız bunu anlatan turkce kitaplardan yada internet uzerinden indirilebilen (mesela delphiye giris isimli bir chm) bir cok ebook tan ogrenebilirsiniz
sanki bana biraz tumdengelim ile problemleri cozuyorsunuz gibi geldi
eger bilmiyorsanız bunu anlatan turkce kitaplardan yada internet uzerinden indirilebilen (mesela delphiye giris isimli bir chm) bir cok ebook tan ogrenebilirsiniz
sanki bana biraz tumdengelim ile problemleri cozuyorsunuz gibi geldi
ÜŞENME,ERTELEME,VAZGEÇME
hocam izahı uzun, detayını inşallah bir sonraki seminerde Hüseyin anlatır
unitin en başında private, public gibi 2 tane kısım var. public kısmına (public kelimesinin altına)
Procedure Renklendir(Rich:TRichEdit);
kodunu ekle.
NOT : Hata alırsanız, hatayı tam olarak yazmanız problemi çözmede çok yardımcı olur. Hatta varsa hata kodunu da belirtin.
Kolay gelsin.

unitin en başında private, public gibi 2 tane kısım var. public kısmına (public kelimesinin altına)
Procedure Renklendir(Rich:TRichEdit);
kodunu ekle.
NOT : Hata alırsanız, hatayı tam olarak yazmanız problemi çözmede çok yardımcı olur. Hatta varsa hata kodunu da belirtin.
Kolay gelsin.
@Admin ve @gkimirti
- Arkadaşlar benim hatam.. Her zaman dikkat ettiğim şeye bu sefer aynı hassasiyeti göstermemişim...
- @hacikisi'ye yazdığım cevap sırasında, ilgilendiği bu konu ile kendisinin Delphi hakimiyeti konusundaki yanılgımdan dolayı detaya inmemiştim... Artık detay diyorum, Delphi IDE ve programlama kurallarına hakim olduğunu değerlendirmiştim...
@hacikisi
- Delphi programcılığında, kullandığın formun üzerine bir nesne koyduğunda (RichEdit, DBGrid vb.), bu nesneyi kullanabilmek için yazdığın Procedure veya Function'un bu forma bağlı olması (en azından şu bilgi düzeyinde) gerekir.
Sebebi ise Procedure içerisinde RichEdit1 veya DBGrid1 dediğinde hangi formdaki nesneyi belirttiğinizi delphi bilebilsin diye...
- Formunuzun adı (Name) AnaMenu olsaydı, Procedure ve Function kelimelerinden sonra dikkat edin TAnaMenu şeklinde bir tanım ve devamında procedure'ünüzün adını görecektiniz...
- Ben sizin projede forum adını Form1 olarak kabul ettim. Çünkü yeni form koyduğunuzda Form1, sonraki eklenen formlar Form2 vb. otomatik isim alır...
- Bir de bir forma adanmış Procedure veya Function ek olarak mutlaka! en üstte Public veya Private kısmında da tanımlanması gerekir ki Delphi, liste olarak oradan bu tip bir tanımın var olduğunu görebilsin ve Form'a ait olduğundan emin olsun...
- Private ve Public kısımlarındaki tanım ile aşağıdaki kodların yazıldığı tanım arasındaki benzerlik/fark'ı bir inceleyin... Ufak bir fark vardır... Yukardaki kısımlar zaten o formun Type başlığına dahil olduğundan, procedure veya function başına TForm1 vs. gibi ön tanım koymaya gerek olmaz ve de konursa da hata olur...
...Kod satırında, Renklendir isimli procedure tanımımın Form1 isimli forma adandığını bildirmiş oldum...
Şimdi yapmanız gereken şey, yukarda Public veya Private aynı unit içerisinde farketmez, hemen altına yeni bir satır açıp şu satırı eklenemiz gerekiyor...
Delphi IDE programcılar için bir kolaylık da düşünmüşler... Yukarda anlattıklarımı kural olarak kavrayın ve aşağıda anlatacağım şey ile bunu tek tuşla nasıl yapabileceğinizi görün...
satırının üzerine gelin...
Ctrl+Shift+C tuş kombinasyonuna basarsanız, Delphi IDE sizin için yukarda Private kısmına yukarda anlattığım tanımı ekler..
- Ekstra bir procedure / function neyse neden ihtiyaç duyuluyor diye bir soru gelebilir aklınıza...
Programın her yerinden sadece tek bir satır kod yazarak bu procedure'e ulaşabilir ve istediğiniz işlemi yapabilesiniz diye...
- Örneğin burada DataSource'unuzun OnDataChange olayına sadece
satırını yazdığınızda siz, kayıtlar üzerinde gezinirken, o kayda ait RichEdit veri okunarak renklendirilir...
- Bu yazıyı hem sorununuzun çözümü hem de Procedure ve Function tanımı hakkında bilgi edinmeniz için yazdım...
- Arkadaşlar benim hatam.. Her zaman dikkat ettiğim şeye bu sefer aynı hassasiyeti göstermemişim...
- @hacikisi'ye yazdığım cevap sırasında, ilgilendiği bu konu ile kendisinin Delphi hakimiyeti konusundaki yanılgımdan dolayı detaya inmemiştim... Artık detay diyorum, Delphi IDE ve programlama kurallarına hakim olduğunu değerlendirmiştim...
@hacikisi
- Delphi programcılığında, kullandığın formun üzerine bir nesne koyduğunda (RichEdit, DBGrid vb.), bu nesneyi kullanabilmek için yazdığın Procedure veya Function'un bu forma bağlı olması (en azından şu bilgi düzeyinde) gerekir.

- Formunuzun adı (Name) AnaMenu olsaydı, Procedure ve Function kelimelerinden sonra dikkat edin TAnaMenu şeklinde bir tanım ve devamında procedure'ünüzün adını görecektiniz...
- Ben sizin projede forum adını Form1 olarak kabul ettim. Çünkü yeni form koyduğunuzda Form1, sonraki eklenen formlar Form2 vb. otomatik isim alır...
- Bir de bir forma adanmış Procedure veya Function ek olarak mutlaka! en üstte Public veya Private kısmında da tanımlanması gerekir ki Delphi, liste olarak oradan bu tip bir tanımın var olduğunu görebilsin ve Form'a ait olduğundan emin olsun...
- Private ve Public kısımlarındaki tanım ile aşağıdaki kodların yazıldığı tanım arasındaki benzerlik/fark'ı bir inceleyin... Ufak bir fark vardır... Yukardaki kısımlar zaten o formun Type başlığına dahil olduğundan, procedure veya function başına TForm1 vs. gibi ön tanım koymaya gerek olmaz ve de konursa da hata olur...
Kod: Tümünü seç
Procedure TForm1.Renklendir(Rich:TRichEdit);
Şimdi yapmanız gereken şey, yukarda Public veya Private aynı unit içerisinde farketmez, hemen altına yeni bir satır açıp şu satırı eklenemiz gerekiyor...
Kod: Tümünü seç
procedure Renklendir(Rich:TRichEdit);

Kod: Tümünü seç
Procedure TForm1.Renklendir(Rich:TRichEdit);
Ctrl+Shift+C tuş kombinasyonuna basarsanız, Delphi IDE sizin için yukarda Private kısmına yukarda anlattığım tanımı ekler..

- Ekstra bir procedure / function neyse neden ihtiyaç duyuluyor diye bir soru gelebilir aklınıza...

- Örneğin burada DataSource'unuzun OnDataChange olayına sadece
Kod: Tümünü seç
Renklendir(RichEdit1);
- Bu yazıyı hem sorununuzun çözümü hem de Procedure ve Function tanımı hakkında bilgi edinmeniz için yazdım...

sonuç Olarak
Son Aşama olarak Diğer üyelerinde faydalanması için uniti kopyala yapıştır yapmak isdedim. MrmCop'a Teşekkürler.
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;
procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Active := True;
end;
procedure TForm1.DBMemo1DblClick(Sender: TObject);
begin
DBMemo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'ARA.TXT');
end;
procedure TForm1.Button3Click(Sender: TObject);
Var
Bulundu : TStringList;
Sayac : Integer;
Adi,
Soyadi : String;
begin
With Query1 do
begin
Active := False;
SQL.Clear;
SQL.Add('Select * from "c:\richedit\data\data.db"');
Active := True;
Bulundu := TStringList.Create;
Repeat
If DBRichEdit1.FindText(Edit1.Text, 0, Length(DBRichEdit1.Text), [stMatchCase]) <> -1
then Bulundu.Add(FieldByName('Adi').AsString+'|'+FieldByName('Soyadi').AsString);
Next;
Until EOF;
If Bulundu.Count > 0 then
begin
Active := False;
SQL.Clear;
SQL.Add('Select * from "c:\richedit\data\data.db"');
For Sayac := 0 to Bulundu.Count-1 do
begin
Soyadi := Bulundu[Sayac];
Adi := QuotedStr(Copy(Soyadi, 1, Pos('|', Soyadi)-1));
Soyadi := QuotedStr(Copy(Soyadi, Pos('|', Soyadi)+1, 999));
If Sayac > 0
then SQL.Add(Format('OR (Adi = %s and Soyadi = %s)', [Adi, Soyadi]))
else SQL.Add(Format('WHERE (Adi = %s and Soyadi = %s)', [Adi, Soyadi]));
end; // For Sayac
Active := True;
end // If Bulundu
else
begin
ShowMessage('Aradığınız kelime kayıtlarda mevcut değil');
Active := False;
end;
Bulundu.Free;
end; // Query1
end;
Procedure TForm1.Renklendir(Rich:TRichEdit);
var
Bulundu, Baslangic, Sonu: Integer;
begin
With Rich do
begin
Text := DBRichEdit1.Text;
SelectAll;
SelAttributes.Style := SelAttributes.Style-[fsBold];
SelAttributes.Color := clBlack;
SelStart := 0;
Baslangic := 0;
Sonu := Length(Text) - Baslangic;
Bulundu := FindText(Edit1.Text, Baslangic, Sonu, [stMatchCase]);
if Bulundu <> -1 then
begin
SetFocus;
SelStart := Bulundu;
SelLength := Length(Edit1.Text);
SelAttributes.Style := [fsBold];
SelAttributes.Color := clGreen;
end;
end; // With RichEdit1
DBGrid1.SetFocus;
end;
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
Renklendir(RichEdit1);
end;
end.
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.
Hz.Muhammed (S.A.V.)

Hz.Muhammed (S.A.V.)

Buradan da yayınlamak istedim...
- RichEdit içerisinde bulunan aynı kelimelerin hepsini renklendiren Procedure aşağıdaki şekildedir...
- Çalışmalarında başarılar...
- RichEdit içerisinde bulunan aynı kelimelerin hepsini renklendiren Procedure aşağıdaki şekildedir...
Kod: Tümünü seç
Procedure TForm1.Renklendir(Rich:TRichEdit);
var
Bulundu: LongInt;
Baslangic, Sonu: Integer;
begin
With Rich do
begin
Text := DBRichEdit1.Text;
SelectAll;
SelAttributes.Style := SelAttributes.Style-[fsBold];
SelAttributes.Color := clBlack;
SelStart := 0;
Bulundu := 0;
While Bulundu <> -1 do // Arka arkaya, bulamayana kadar arasın diye
begin
if SelLength <> 0
then Baslangic := SelStart + SelLength
else Baslangic := 0;
Sonu := Length(Text) - Baslangic;
Bulundu := FindText(Edit1.Text, Baslangic, Sonu, [stMatchCase]);
if Bulundu <> -1 then
begin
SetFocus;
SelStart := Bulundu;
SelLength := Length(Edit1.Text);
SelAttributes.Style := [fsBold];
SelAttributes.Color := clGreen;
end;
end;
end; // With RichEdit2
DBGrid1.SetFocus;
end;
Herkese Selamlar,
Öncelikle verdiğim bilginin, yanıltıcı bir şekilde bilgi anlatıldığı için herkesten, herkes adına özür diliyorum. Kasdettiğim şey, eğer yazdığım yanıt tam olarak okuyunca anlaşılabiliyor.
Şöyle örneklendirerek izah etmeye çalışayım,
Bir makalenin kopyasının oluşturulduğu (RTF olabilir, Memo TEXT olabilir) bu şekilde bir kayıtta küçük harf ve büyük harf yazılışının belirsiz olduğu kayıtlarda LIKE ile sorgulama yaparken sorun yaşanıyor. Aslında benim kasdettiğim bu idi.
Yaklaşık 3-4 ay önce buna benzer bir proje (Türk Kardiyoloji Derneği Bildirileri) üzerine bir proje hazırlamıştık. Hazırladığımız bu projede (benimle beraber benzeri bir işi Türk Kardiyoloji Derneği Makaleleri, İsmail KOKTAY arkadaşımız) hazırladı.
Her ikimizde uygulamalarımızda bu tarz aramaların Yani makalenin içinde veya başlığında herhangi bir şekilde yazılmış olan kelimeleri aratacaktık ve bulduklarını insanlara listeleyip göstermesi istendi.
Bu çalışmalar sırasında karşılaştığımız sorunlar neticesinde, Paradox'ta LIKE kullanımının Türkçe ve Case Insensitive şekilde olmadığını gördük. İşte kasdettiğim şey bu idi ama sanırım yanlış ifade etmişim. Bu yanlış anlatımdan dolayı herkesten özür diliyorum. İsteyen arkadaşlara bu projeyi sourceları ile birlikte gönderebilirim. İçinde bahsedilen (Yani texte işaretlemeler dahil) her şey var. Yani Exact Match, Case Insensitive Match gibi.
Herkese Kolay Gelsin.
Öncelikle verdiğim bilginin, yanıltıcı bir şekilde bilgi anlatıldığı için herkesten, herkes adına özür diliyorum. Kasdettiğim şey, eğer yazdığım yanıt tam olarak okuyunca anlaşılabiliyor.
Aslında LIKE'ın kullanılabildiğini ancak istenilen sonucun alınamayacağını kasdediyordum. Yani Türkçe Karakterlerde sorun yaşanacağı ve UPCASE yada UPPER gibi SQL fonksiyonlarının Local SQL'de (Capability Not Supported gibi) hata alınacağını ve desteklenmediğini, bu sebeple aramaların tam randımanlı çalışmayacağını kasdetmiştim.Kuri_TLJ anlatmaya çalışmış ama sanırım tam ifade edemeden yazdı:
Merhaba,
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.
Örneğin,
Kod:
TABLO1
Tablo1.MakaleID AUTOINC
Tablo1.MakaleAdi ALPHA 30
Tablo1.MakaleYazari ALPHA 25
Tablo1.Makale MEMO 10
TABLO2
Tablo2.Tablo1MakaleID INTEGER
Tablo2.Kelime ALPHA 30
şeklinde tablo yapılarını oluştur. MemoField'ın içinde geçen her kelimeyi tek tek TABLO2'ye insert et ve arama yapılırken, eğer arama MemoField üzerinde olacaksa, sen dönüp tablo2'de aramanı gerçekleştir.
Uyarı : Like kullanımı ağır olur (Paradox için)
Ayrıca Türkçe Karakterlerde arama yaparken Küçük/Büyük Harf ayrımı yapacaksan nazaran daha hızlı olur ama yapmayacaksan hepsini Büyük harfe çevirip yazman gerekir aks takdirde UPPER() komutunu kullanırsın, bunu da kullandığında bu da ekstra bir yavaşlama getirir. Kayıt sayısı çok ise (onbinlerle ifade ediliyorsa,) paradoxtan vazgeç bu iş için uygun değil !... Verimli olmaz başka bir DB seç ve özellikle SQL Based bir DB olsun FireBird veya Interbase gibi. :
Kolay Gelsin
Şöyle örneklendirerek izah etmeye çalışayım,
Bir makalenin kopyasının oluşturulduğu (RTF olabilir, Memo TEXT olabilir) bu şekilde bir kayıtta küçük harf ve büyük harf yazılışının belirsiz olduğu kayıtlarda LIKE ile sorgulama yaparken sorun yaşanıyor. Aslında benim kasdettiğim bu idi.
Yaklaşık 3-4 ay önce buna benzer bir proje (Türk Kardiyoloji Derneği Bildirileri) üzerine bir proje hazırlamıştık. Hazırladığımız bu projede (benimle beraber benzeri bir işi Türk Kardiyoloji Derneği Makaleleri, İsmail KOKTAY arkadaşımız) hazırladı.
Her ikimizde uygulamalarımızda bu tarz aramaların Yani makalenin içinde veya başlığında herhangi bir şekilde yazılmış olan kelimeleri aratacaktık ve bulduklarını insanlara listeleyip göstermesi istendi.
Bu çalışmalar sırasında karşılaştığımız sorunlar neticesinde, Paradox'ta LIKE kullanımının Türkçe ve Case Insensitive şekilde olmadığını gördük. İşte kasdettiğim şey bu idi ama sanırım yanlış ifade etmişim. Bu yanlış anlatımdan dolayı herkesten özür diliyorum. İsteyen arkadaşlara bu projeyi sourceları ile birlikte gönderebilirim. İçinde bahsedilen (Yani texte işaretlemeler dahil) her şey var. Yani Exact Match, Case Insensitive Match gibi.
Herkese Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Haaa unutmadan, eğer Paradox'ta Türkçe bir table'da case insensitive şekilde LIKE ile sorgulama yapılabildiği konusunda (yada bunu başarmış arkadaşlar var ise) bu bilgilerini bizimle paylaşırsa biz de çok seviniriz. Bilmediğimiz yada ulaşamadığımız bir bilgiyi bize öğretise ve bizlerle paylaşırsa Duacısı oluruz.
Kolay gelsin.

Kolay gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/