Autor |
Beitrag |
ShadowThief
Beiträge: 278
|
Verfasst: Di 09.12.03 16:00
da ich in meinem RichEdit-feld bei jedem onKeyUp-event eine überprüfung auf Lines.Text mache und bei bestimmten wörtern per SelStart und SelLength text-attribute setze (syntax hilighting) habe ich ein problem.
von der geschwindigkeit her ist es in ordnung, jedoch flimmert die textauswahl, was ziemlich unschön aussieht. gibt es die möglichkeit ein zeichnen der richedit-komonente zu verhindern?
danke im vorraus.
shadow.
_________________ "soylent grün ist menschenfleisch!"
|
|
CenBells
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Di 09.12.03 16:26
hallo,
hast du dich mal mit der Komponente SynEdit auseinandergesetzt? Die kann Syntax-high-lightning. Ich meine auch mal gelesen zu haben, daß die verschiedenste Vorlagen unterstützt.
Gruß
Ken
_________________ Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
|
|
ShadowThief
Beiträge: 278
|
Verfasst: Di 09.12.03 16:36
ich kenn die komponente, die kann ich aber leider nicht verwenden,
da mein chef in meinen programmen keine fremdkomponenten
haben will.
_________________ "soylent grün ist menschenfleisch!"
|
|
Chatfix
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Di 09.12.03 16:56
Selbst wenn du das neuzeichnen verhindern könntest, wie wilst du dann das higlighting umsetzen?
Du könntest es z.b. so machen, das er nur bei jedem leerzeichen deinen Text formatiert...
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
CenBells
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Di 09.12.03 17:17
hallo,
gibt es für die eigenschaft lines vielleicht eine Methode namens beginupdate? Ich schau heute abend auch mal nach ob ich noch nen Quelltext dazu habe. Ich habe sowas auch mal gemacht.
Gruß
Ken
_________________ Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
|
|
ShadowThief
Beiträge: 278
|
Verfasst: Mi 10.12.03 11:39
ja, "beginupdate" gibt es in "lines", aber ich komm nicht ganz dahinter,
wie mir das helfen soll.
shadow.
_________________ "soylent grün ist menschenfleisch!"
|
|
Chatfix
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Mi 10.12.03 11:46
Also ich kenn BeginUpdate auf VB.NET
Dort setzt du BeginUpdate, machst deine aktualisierungen (es wird nciht neugezeichnet) und wenn du fertig bist machst du EndUpdate (kann sein das es in Delphi anders heist) und dann wird neugezeichnet...
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
ShadowThief
Beiträge: 278
|
Verfasst: Mi 10.12.03 12:06
das hab ich probiert, allerdings sieht man immernoch
die selektierungen aufflimmern (selstart, sellength). außer ich hab
irgendetwas falsch gemacht. hier mein code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69:
| var s: string; starts, ends: array of Integer; p1, p2: Integer; l: Integer; i: Integer; selstart, sellength: Integer;
begin
// Cursorpsoition speichern selstart := RichEdit.SelStart; sellength := RichEdit.SelLength;
RichEdit.Lines.BeginUpdate;
// Start- und Endpunkte von Steuerzeichen ermitteln ('[' und ']') s := RichEdit.Lines.Text;
repeat p1 := Pos('[', s);
if p1 <> 0 then begin
p2 := Pos(']', s);
if p2 <> 0 then begin
l := Length(starts);
SetLength(starts, l + 1); SetLength(ends, l + 1);
starts[l] := p1; ends[l] := p2;
s := StringReplace(s, '[', ' ', []); s := StringReplace(s, ']', ' ', []);
end else p1 := 0;
end;
until p1 = 0;
// Steuerzeichen fett machen. RichEdit.SelectAll; RichEdit.SelAttributes.Style := [];
for i := 0 to Length(starts) - 1 do begin
RichEdit.SelStart := starts[i] - 1; RichEdit.SelLength := ends[i] - starts[i] + 1; RichEdit.SelAttributes.Style := [fsBold];
end;
RichEdit.Lines.EndUpdate;
// Cursorposition auf Urzustand zurücksetzen RichEdit.SelStart := selstart; RichEdit.SelLength := sellength;
end; |
problematisch wird ab dem Kommentar "// Steuerzeichen fett machen".
RichEdit.SelectAll usw. flimmert.
_________________ "soylent grün ist menschenfleisch!"
|
|
Chatfix
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Mi 10.12.03 12:14
Mach doch mal das BeginUpdate ganz am anfang, und das EndUpdate ganz zum schluss
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
ShadowThief
Beiträge: 278
|
Verfasst: Mi 10.12.03 13:44
versteh ich jetzt zwar nicht, aber es funktioniert.
vielen dank.
shadow.
_________________ "soylent grün ist menschenfleisch!"
|
|
Chatfix
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Mi 10.12.03 13:46
Na mit EndUpdate wird neu gezeichnet...
Da du nach dem neuzeichnen wieder etwas selektierst flackerts wieder *gg*
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
ShadowThief
Beiträge: 278
|
Verfasst: Mi 10.12.03 14:53
ok
_________________ "soylent grün ist menschenfleisch!"
|
|