Einzelnen Beitrag anzeigen

Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#11

Re: SynEdit: Textfarbe an bestimmter Stelle herausfinden

  Alt 17. Mär 2005, 14:18
Die aktuelle Zeile kannst du farbig markieren, in dem du die Eigenschaft "ActiveLineColor" des SynEdit änderst.

Die roten Markierungen zeichnen ich selber auf das Canvas.

Zu dem Auslesen der Werte, hier mal eine Funktion, wird zwar nicht die beste sein, aber als Denksanstoss bestimmt geignet:
Delphi-Quellcode:
function GetItem(const AData: TStrings; const ARoom, AItem: String): String;
var
  i, j, k,
  fPos,
  fOpenStart: Integer;
  fLine: String;
  fFinish,
  fOpen: Boolean;
begin
  Result := '';
  //nach der Position des Raums suchen
  for i := 0 to AData.Count - 1 do
  begin
    if Pos(ARoom, AData[i]) > 0 then
      if Pos('Raum', AData[i]) = 1 then
      begin
        fPos := i;
        Break;
      end;
  end;
  //Attribut auslesen
  fFinish := False;
  fOpen := False;
  for i := fPos to AData.Count - 1 do
  begin
    if Pos(AItem, AData[i]) = 1 then
    begin
      fLine := AData[i];
      //Wert abtrennen
      for j := Pos(' ', fLine) to Length(fLine) do
      begin
        if fLine[j] <> ' then
        begin
          for k := j to Length(fLine) do
            Result := Result + fLine[k];
          Break;
        end;
      end;
      //prüfen, ob der String vollständig ist
      if Result[1] = '''then
      begin
        fOpen := True;
        fOpenStart := i;
        //Anführungszeichen entfernen
        Delete(Result, 1, 1);
      end else
        fFinish := True;
    end;
    if fOpen then
    begin
      if fOpenStart = i then
        Continue;
      fLine := AData[i];
      if fLine = 'then
        Continue;
      //Wert abtrennen
      for j := Pos(' ', fLine) to Length(fLine) do
      begin
        if fLine[j] <> ' then
        begin
          for k := j to Length(fLine) do
            Result := Result + fLine[k];
          Break;
        end;
      end;
      if Result[Length(Result)] = '''then
      begin
        fOpen := False;
        fFinish := True;
        Delete(Result, Length(Result), 1);
      end;
    end;
    if fFinish then
      Break;
  end;
Hier noch ein Beispiel zur Verwendung. Anstatt die Datei zu laden, kannst du als AData auch bspw. die Lines eines Memos oder so angeben, je nach dem was da auf dem Screenshot ist, weiß ja nicht wo du es brauchst:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  //Stringliste zum speichern der Daten
  fData: TStrings;
begin
  //Instanz anlegen
  fData := TStringList.Create;
  try
    //Liste laden
    fData.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Karn.adv.txt');
    //Wert "Std" von "Eingang" auslesen
    Edit1.Text := GetItem(fData, 'Eingang', 'Std');
    //wert "Besch" von Eingang" auslesen
    Memo1.Text := GetItem(fData, 'Eingang', 'Besch');
  finally
    //Liste wieder freigeben
    fData.Free;
  end;
end;
  Mit Zitat antworten Zitat