Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hideselection funktioniert nicht (https://www.delphipraxis.net/93001-hideselection-funktioniert-nicht.html)

moperswings 30. Mai 2007 07:52


Hideselection funktioniert nicht
 
Hallo,

könnt Ihr Euch mal kurz den Code ansehen:
Ich kann an den Strings die Farbe ändern und sie auf Schreibschutz stellen, aber nicht verstecken!
Sieht jemand meinen Fehler?

Viele Grüsse, moperswings

Delphi-Quellcode:
function findtextall(re: TRichEdit; sText: string; options:TSearchTypes): TIntegerdynarray;
var
        istart, ifound, ilength: integer;
begin
        setlength(result, 0);
        istart := 0;
        ilength := length(re.Lines.Text);
        while istart < (ilength - length(stext)) do
        begin
          ifound := re.FindText(sText, istart, ilength - istart, options);
          if ifound = - 1 then
          exit;
          Setlength(Result, succ(length(result)));
          result[high(result)] := ifound;
          istart := ifound + length(stext);
        end;
end;

procedure TForm1.Button19Click(Sender: TObject);
var
        i, p, x: integer;
        s: string;
        bild: string;
        dateiname: string;
        inhalt: Tstringlist;
        ida: TIntegerDynArray;
begin
        dateiname := 'd:\image16\daten.html';
        RichEdit3.Lines.LoadFromFile(dateiname);

        inhalt := TStringlist.Create;
        inhalt.LoadFromFile(dateiname);

        bild := '<img';

        for i := 0 to inhalt.Count - 1 do
          begin
            if pos(bild, inhalt[i]) > 0 then begin
            s := '';

            for p := pos(bild, inhalt[i]) to
            length(inhalt[i]) do
            if inhalt[i][p] <> s then
            s := s + inhalt[i][p]
            else
            break;
       
            while pos(s[length(s)], '/>') = 0 do
            delete(s, length(s), 1);
          end;

        ida := findtextall(RichEdit3, s, []);
        for x := low(ida) to high(ida) do
        with RichEdit3 do
          begin
            selstart := ida[x];
            sellength := length(s);
            //selattributes.Color := clred; -> funktioniert ==================
            HideSelection := true; // RichEdit habe ich auch auf true umgestellt! ???
           // selattributes.Protected := true; -> funktioniert ===============
          end;
          RichEdit3.SetFocus;
        end;
        inhalt.Free;
end;

xaromz 30. Mai 2007 07:59

Re: Hideselection funktioniert nicht
 
Hallo,

Du setzt doch am Ende den Fokus auf das RichEdit. HideSelection dient aber nur dazu, die Markierung zu verstecken, wenn das Control keinen Focus hat. Somit zeigt das Richedit also das erwartete Verhalten. Eventuell solltest Du mit
Delphi-Quellcode:
SelLength := 0;
einfach die Markierung entfernen.

Gruß
xaromz

moperswings 30. Mai 2007 08:21

Re: Hideselection funktioniert nicht
 
Aber die Länge brauche ich doch, um bis zum Ende des Strings zu kommen, der Markiert werden soll!
Oder verstehe ich Dich falsch?

xaromz 30. Mai 2007 12:17

Re: Hideselection funktioniert nicht
 
Hallo,

wozu brauchst Du denn die Markierung am Ende?

Gruß
xaromz

moperswings 30. Mai 2007 14:06

Re: Hideselection funktioniert nicht
 
Das ist ein Teilstring in einem RichEdit. Diesen String kann ich schützen oder die Farbe ändern. Und ich wollte ihn auch unsichtbar machen - und das müsste doch mit hideselection gehen!

Flocke 30. Mai 2007 14:19

Re: Hideselection funktioniert nicht
 
Nein. HideSelection setzt nicht das Attribut "hidden" beim ausgewählten Text sondern bewirkt das, was xaromz schon beschrieben hat.

Die Eigenschaft "versteckt" (CFE_HIDDEN in TTextFormat in RichEdit.pas) gehört zu denen, die ein RichEdit zwar "unterstützt" aber nicht anzeigt. Mit "Unterstützung" meinen die Entwickler von Microsoft hier, dass das Attribut aus einer RTF-Datei eingelesen und auch wieder in diese geschrieben wird.

moperswings 30. Mai 2007 15:17

Re: Hideselection funktioniert nicht
 
Also kann ich den Text nicht unsichtbar machen!
Alles klar!
Vielen Dank und viele Grüsse
moperswings

Lannes 30. Mai 2007 15:25

Re: Hideselection funktioniert nicht
 
Hallo,

versuch es mal damit:

Delphi-Quellcode:
RichEdit.SelText := '{\rtf1 \v '+RichEdit.SelText+'\v0}';
Das ist aber abhängig vom Betriebssystem bzw. der genutzten RichEd**.dll!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz