بخصوص Richedit
#10
السلام عليكم
هناك في مكونات 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; 
جرب وحاول بالتوفيق.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد


الردود في هذا الموضوع
بخصوص Richedit - بواسطة Youcef413 - 12-05-2010, 04:57 PM
بخصوص Richedit - بواسطة AvimimuS - 12-05-2010, 06:09 PM
بخصوص Richedit - بواسطة Youcef413 - 12-05-2010, 06:35 PM
بخصوص Richedit - بواسطة shagrouni - 12-05-2010, 06:55 PM
بخصوص Richedit - بواسطة Youcef413 - 12-05-2010, 07:31 PM
بخصوص Richedit - بواسطة AvimimuS - 12-05-2010, 08:14 PM
بخصوص Richedit - بواسطة Youcef413 - 12-05-2010, 08:17 PM
بخصوص Richedit - بواسطة AvimimuS - 12-05-2010, 09:31 PM
بخصوص Richedit - بواسطة Youcef413 - 13-05-2010, 11:44 AM
بخصوص Richedit - بواسطة kachwahed - 15-05-2010, 04:43 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم