AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

aktuelle Zeile in SynEdit einfärben

Ein Thema von torud · begonnen am 29. Mai 2003 · letzter Beitrag vom 31. Mai 2003
Antwort Antwort
Seite 1 von 2  1 2      
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

aktuelle Zeile in SynEdit einfärben

  Alt 29. Mai 2003, 15:02
Hallo Wissende,

ich habe in diesem Forum schon gute hilfe gefunden und hoffe nun darauf auch diesmal dies erfahren zu dürfen, was mich interessiert.

Ich habe einen CSS-Editor programmiert (Freeware) und möchte nun, dass der User genau sieht, wo er gerade ist. Es soll so sein, dass wenn der User aktuell in der 3 Zeile seinen Curosr hat, soll die z.B. gelb sein und der Rest normal weiss. Verlässt er diese Zeile, soll diese wieder weiss werden und die nun aktuelle Zeile soll die Farbe gelb erhalten.

Das wäre es schon. Schön wäre es, wenn man der Zeile auch einen gestrichelten Rahmen geben könnte. Das muss aber nicht sein, wäre nur ein toller Zusatz.

folgender Link hat mir nicht geholfen:
http://www.geocrawler.com/archives/3.../10/0/4572020/ ,
da er nur die aktuelle Zeile einfärbt aber nicht erklärt, wie man dies wieder aufhebt und statt dessen die nächste Zeile auch noch einfärbt.

Wer kann mir helfen ?
Danke
Tom
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2
  Alt 29. Mai 2003, 15:17
Da schließ ich mich doch glatt mal an...

Chris

PS: Nur um die Antworten mitzubekommen...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 29. Mai 2003, 16:41
Moin Tom,

OnSpecialLineColors wird beim Zeichnen jeder Zeile aufgerufen.
Jetzt musst Du nur noch einen Filter in die Funktion einbauen, der, je nach Zeilennummer die gerade dran ist (die Zählung fängt bei 1 an), die Farben setzt, oder eben auch nicht.

Beispiel:
Ich habe 3 Zeilen, und die sollen "hübsch bunt" werden:

Delphi-Quellcode:
procedure TfrmMAIN.SynEdit1SpecialLineColors(Sender: TObject;
  Line: Integer; var Special: Boolean; var FG, BG: TColor);
begin
  Special := true;
  case Line of
    1 : begin
      FG := clBlue;
      BG := clYellow;
    end;
    2 : begin
      FG := clRed;
      BG := clBlack;
    end;
    3 : begin
      FG := clGray;
      BG := clPurple;
    end;
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#4

Ich fress ´n Besen

  Alt 29. Mai 2003, 21:41
Moin Christian,

sollte das funzen, fress ich´n Besen. Ich habe diese Procedure schon in ähnlicher Weise benutzt, ohne halt auszuwerten, wo bin ich. Es müsste also reichen das CaretX abzufragen und dann die Zuweisung zu machen.

Hast Du einen Plan, wo man(n) noch "deutsche" Hilfe für Newbies zum Thema SynEdit finden kann ?

Danke
Tom
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#5
  Alt 29. Mai 2003, 21:50
Moin Tom,

ich wüsste zu SynEdit im Moment leider gar keine Hilfe, geschweige denn eine deutschsprachige, bzw. für Newbies in SynEdit.

Das Beispiel hab' ich schon ausprobiert, es funzt.
Da ich mich mit SynEdit ansonsten kaum auskenne hab' ich mich auch davor "gedrückt" herauszufinden, welche Zeile die aktuelle ist. CaretPos.X wie bei RichEdit konnte ich nämlich nicht finden

Wenn Du dafür eine Lösung hast: Immer her damit.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#6
  Alt 29. Mai 2003, 21:54
Ich hab grad kein Delphi da...aber vielleicht gibts ja sone art "Lines.index" oder in der Richtung... Viel Glück noch bei der Suche.
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#7

Nicht ganz des Rätsels Lösung

  Alt 29. Mai 2003, 21:59
Folgendes habe ich nun bei mir getan, um dem, was ich will nahe zu kommen:
Delphi-Quellcode:
procedure TfrmMAIN.SynEdit1SpecialLineColors(Sender: TObject;
  Line: Integer; var Special: Boolean; var FG, BG: TColor);
var
 i:integer;
begin
  Special := true;
     for i:= 1 to SynEdit1.Lines.Count -1 do
       begin
         if Line = SynEdit1.CaretY then
           begin bg:=clgreen; end
         else
           begin gb:=clwhite; end;
       end;
end;
Es funktionier solange gut, wie ich nur die Entertaste und Backspace zum Einsatz bringe. Sobald ich aber per Mouse, oder Pfeil hoch und runter die aktuelle Zeile Verlasse, wird sie nicht neu gezeichnet und somit gibts auch nicht den Effekt, wie ich ihn gern hätte.

Wie komme ich nun endgültig zum Ziel?
Nochmals vielen Dank für die Unterstützung.

Tom
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 29. Mai 2003, 22:15
Moin Tom,

beim Klicken ginge es so:

Delphi-Quellcode:
procedure TfrmMAIN.SynEdit1SpecialLineColors(Sender: TObject;Line: Integer; var Special: Boolean; var FG, BG: TColor);
begin
  if Line = SynEdit1.CaretY then
  begin
    Special := true;
    bg :=clGreen;
  end;
end;

procedure TfrmMAIN.SynEdit1Click(Sender: TObject);
begin
  SynEdit1.Refresh;
end;
Nur mit dem Bewegen per Taste hab' ich noch keine Lösung.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#9
  Alt 30. Mai 2003, 12:05
Moin Chris,

Hm, also werde ich es erst einmal so probieren, wie Du es geschrieben hast. Gibt es denn nicht einfach die Möglichkeit herauszufinden, ob eine der vier Pfeiltasten gedrückt worden ist? Das könnte man doch in OnKeyDown reinnehmen und dann sagen:
Delphi-Quellcode:
procedure TForm1.SynEdit1KeyDown(Sender: TObject; var Key: Word; Shift:TShiftstate);
var
 x,y:integer;
begin
  X:=SynEdit1.CaretX;
  Y:=SynEdit1.CaretY;
  Statusbar1.Panels.Items[0].Text:=inttostr(Y)+':'+inttostr(x);
if (Key = vk_Down) or (Key = vk_up) then
  SynEdit1.Referesh
So weit so gut. Nun habe ich das gleich mal getestet und festellen müssen, dass die Markierung der aktuellen Zeile immer um eins "nachhängt". Das heisst, dass der Cursor zwar schon von der letzten Zeile 5 auf die 4. gesprungen ist, aber noch nicht die 4. Zeile markiert worden ist. Gehe ich nun in die 3. Zeile springt die Markierung in die 4te. usw. Dabei habe ich auch gleich noch bemerken dürfen, dass natürlich dementsprechend auch meine Anzeige in der Statusleiste "hinkt".

Abhilfe?
Gegenvorschläge?
Tom
[EDIT=Luckie]Code-Tags gefixt.[/EDIT]
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#10
  Alt 30. Mai 2003, 14:49
Moin Tom,

ich denke ich hab's

Delphi-Quellcode:
var
  iOffset : integer; // globale Variable

procedure TfrmMAIN.SynEdit1SpecialLineColors(Sender: TObject;
  Line: Integer; var Special: Boolean; var FG, BG: TColor);
begin
 if (Line = (SynEdit1.CaretY+iOffset)) then
  begin
    Special := true;
    bg :=clGreen;
  end;
end;

procedure TfrmMAIN.SynEdit1Click(Sender: TObject);
begin
  SynEdit1.Refresh;
end;

procedure TfrmMAIN.SynEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_DOWN then iOffset := 1;
  if (Key = VK_UP) then iOffset := -1;
  if ((SynEdit1.CaretY = 1) and (iOffset = -1)) or ((SynEdit1.CaretY = SynEdit1.Lines.Count) and (iOffset = 1)) then iOffset := 0;
  SynEdit1.Refresh;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 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