delphi4arab منتديات دلفي للعرب

نسخة كاملة : بخصوص Richedit
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
بسم الله الرحمان الرحيم

قمت بإعداد Richedit على جلب النص من ملف TXT و هذا طبعا أبسط شيئ.
و أنا لا أعرف طريقة لجعله إحترافي مثال :
إذا كتبنا في المستند النصي بسم الله الرحمان الرحيم تظهر في Richedit بسم الله الرحمان الرحيم عادي ولكن إذا كتبنا مثلا /B/بسم الله الرحمان الرحيم/b/ يظهر غليظ في Richedit أو بلون مغاير أو أي شيئ هذا ما يحيرني
شكرا لكم
السلام عليكم
اخي الكريم في RichEdit توجد الخاصية SelAttributes والتي تسمح لنا بتحكم في خصائص النص
المدرج
فمثلا لتغير حجم النص يكفي كتابة

PHP كود :
SelAttributes.Size := 15; 
او لتغير اللون
PHP كود :
SelAttributes.Color := clRed; 
نو ع النص
PHP كود :
SelAttributes.Style := [fsBold];//(fsBold, fsItalic, fsUnderline, fsStrikeOut) 

والمثال الاتي يوضح طريقة التعامل مع النص في [COLOR="Red"]RichEdit[/COLOR]

PHP كود :
with MyRichEdit do
 
begin
   
//move caret to end
   
SelStart := GetTextLen;

   
//add one unformatted line
   
SelText := 'This is the first line' + #13#10;

   //add some normal font text
   
SelText := 'Formatted lines in RichEdit' + #13#10;

   //bigger text
   
SelAttributes.Size := 15;

   
//add bold + red
   
SelAttributes.Style := [fsBold];
   
SelAttributes.Color := clRed;
   
SelText := 'Delphi';

   
//only bold
   
SelAttributes.Color := clWindowText;
   
SelText := ' 4Arab';

   
//add italic + blue
   
SelAttributes.Style := [fsItalic];
   
SelAttributes.Color := clBlue;
   
SelText := 'Programming';

   
//new line
   
SelText := #13#10;

   //add normal again
   
SelAttributes.Size := 8;
   
SelAttributes.Color := clGreen;
   
SelText := 'think of AddFormattedLine custom procedure...';
end; 

واستنتج ماتريد بنفسك ...
السلام عليكم أخي الكريم
سكرا لك على هذه الإجابة فهي نصف المطلوب و قد استفدت أما النصف الثاني أخي العزيز فهو :
إذا كتبنا مثلا في Richedit إسم محدد مثلا دلفي فيصبح من تلقاء نفسه غليظ أو يتغير لونه مثل كلة begin في دلفي فهي تتحول من تلقاء نفسها إلى غليظ وشكرا لك أخي الفاضل
السلام عليكم


استخدم مكون SynEdit والذي يدعم خاصية تعليم التركيبات اللغويةsyntax highlighting

http://synedit.sourceforge.net/

هذا المكون يستخدم كثيرا كأداة لتحرير واستظهار الأكواد.
لقد قمت بتثبيته على الدلفي 7 و لكن أرى أن هذا المكون يخص لغات برمجة محددة مثلا بايثون و سي ++ و بيرل ..... الخ و أنا أحتاج إلى كلمات معينة أختارها بنفسي فهل من طريقة؟
[COLOR="Red"]اخي الكريم
يمكن عمل هدا
في الحدث OnKeyUp الخاص بال RichEdit[/COLOR]
اي ان كتبت مثلا Delphi4Arab يصبح لونها مثلا ازرق تلقائيا
أخي لقد قمت بتثبيته على الدلفي 7 و لكن أرى أن هذا المكون يخص لغات برمجة محددة مثلا بايثون و سي ++ و بيرل ..... الخ و أنا أحتاج إلى كلمات معينة أختارها بنفسي فهل من طريقة؟
إقتباس :في الحدث onkeyup الخاص بال richedit
اي ان كتبت مثلا delphi4arab يصبح لونها مثلا ازرق تلقائيا
شكرا أخي العزيز عى كل شيئ و على المكون الرائع
طلب أخير وهو الكود من فضلك
شكرا
إقتباس :طلب أخير وهو الكود من فضلك
اخي الكريم هدف المنتدي تعليمي توجيهي وليس لاعطاء الحلول مباشرة .
فلو كان كل شخص ياتي للمنتدي يجد الحل مباشرة فمن سيتعلم ..؟؟؟

إقتباس :كلمات معينة أختارها بنفسي فهل من طريقة

اخي الكريم حاول ان تفكر قليلا
لجعل الكلمة التي تريدها مثلا حمراء فمادا تحتاج ..؟وضعية الكلمة ...تحديد طولها حتي تتاثر الا الكلمة التي اخترتها ... والتحقق من وجودها ...
نعم نعم أعرف ماذا أحتاج لكن المشكلة هل أنني لا أستطيع ترجمتها إلى كود
السلام عليكم
هناك في مكونات SynEdit (بالتأكيد!) مكون أو طريقة حسب ما أذكر بتحديد تنسيق معينة حسب رغباتك
أي أنه Customizable
إقتباس :نعم نعم أعرف ماذا أحتاج لكن المشكلة هل أنني لا أستطيع ترجمتها إلى كود
كيف أدركت أنك لا تستطيع وأنت لم تحاول!
إبدا المحاولة ولو خاطئة ثم نحن هنا...
مثال لصاحبه d-tnt لبرمجة Syntaxe Highlighter بسيط لكلمات دلفي المحجوزة:
PHP كود :
function TForm1.CheckList(InString: string): boolean;
const 
TheList: array[1..13] of string = ('begin', 'or', 'end','end.',
'end;', 'then', 'var', 'for', 'do', 'if', 'to', 'string', 'while');
var 
X: integer;
begin
  Result 
:= false;
  
X := 1;
  
InString := StringReplace(InString, ' ', '',[rfReplaceAll]);
  
InString := StringReplace(InString, #$A, '',[rfReplaceAll]);
  
InString := StringReplace(InString, #$D, '',[rfReplaceAll]);
  
while X < High(TheList) + 1 do
  if 
TheList[X] = lowercase(InString) then
  begin
    Result 
:= true;
    
X := High(TheList) + 1;
  
end
  
else inc(X);
end;

procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word;
  
Shift: TShiftState);
var 
WEnd, WStart, BCount: integer;
  
Mark: string;
begin
  
if (ssCtrl in Shift) and (Key = ord('V')) then Button2Click(Self);
  if (
Key = VK_Return) or (Key = VK_Back) or (Key = VK_Space) then
  begin
    
if RichEdit1.SelStart > 1 then
    begin
      WStart 
:= 0;
      
WEnd := RichEdit1.SelStart;
      
BCount := WEnd - 1;
      while 
BCount <> 0 do
      
begin
        Mark 
:= copy(RichEdit1.Text, BCount, 1);
        if (
Mark = ' ') or (Mark = #$A) then
        
begin
          WStart 
:= BCount;
          
BCount := 1;
        
end;
        
dec(BCount);
      
end;
      
RichEdit1.SelStart := WEnd - (WEnd - WStart);
      
RichEdit1.SelLength := WEnd - WStart;
      if 
CheckList(RichEdit1.SelText) then
        RichEdit1
.SelAttributes.Style := [fsBold]
      else 
RichEdit1.SelAttributes.Style := [];
      
RichEdit1.SelStart := WEnd;
      
RichEdit1.SelAttributes.Style := [];
    
end;
  
end;
end;

function 
SearchFor(WorkSpace, Search: string; Start: integer): integer;
var 
Temp: string;
begin
  Temp 
:= copy(WorkSpace, Start, length(WorkSpace));
  
Result := pos(Search, Temp);
end;

procedure TForm1.HighLight;
var 
WStart, WEnd, WEnd2: integer;
  
WorkSpace, SWord: string;
begin
  WStart  
:=  1;
  
WEnd  :=  1;
  
with  RichEdit1 do
  
begin
    WorkSpace  
:=  Text + ' ' + #$D#$A;
    
while WEnd > 0 do
    
begin
      WEnd 
:= SearchFor(WorkSpace, ' ', WStart);
      
WEnd2 := SearchFor(WorkSpace, #$A, WStart);
      
if WEnd2 < WEnd then WEnd := WEnd2;
      
SWord := copy(WorkSpace, WStart, WEnd - 1);
      if (
SWord <> ' ') and (SWord <>'') then
        
if CheckList(SWord) then
        begin
          SelStart  
:= WStart - 1;
          
SelLength := length(SWord);
          
SelAttributes.Style := [fsBOLD];
          
SelStart := WStart + length(SWord) + 1;
          
SelAttributes.Style := [];
        
end;
      
WStart := WStart + WEnd;
    
end;
    
SelStart := length(Text);
    
SetFocus;
  
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  
if OpenDialog1.Execute then
  begin
    RichEdit1
.Lines.LoadFromFile(OpenDialog1.FileName);
    
HighLight;
  
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  RichEdit1
.PasteFromClipboard;
  
HighLight;
end; 
جرب وحاول بالتوفيق.