Avatar billede mr.meincke Nybegynder
01. oktober 2003 - 20:36 Der er 11 kommentarer og
1 løsning

Farve linie

Hej,
Jeg ville bare spørge om der er nogen som kan fortælle mig hvordan man kan farve den linie man er på i en synedit. Jeg har leget lidt med TSynEdit.SpecialLineColors...

Plz Help!

//Mr.Meincke
Avatar billede klasker Nybegynder
08. oktober 2003 - 15:03 #1
Jeg kender ikke SynEdit, men hvis den er ligesom TRichEdit så burde dette virke.

var
  Syn_OldLine: Integer = 0;

procedure TMainForm.SyneditSelectionChange(Sender: TObject);
var
  L, WasSel, WasSelLen: Integer;
  Edit: TSynEdit;
begin
  Edit := TSynEdit(Sender);
  L := Edit.Perform( EM_LINEFROMCHAR, 0, 0 );
  if L <> Syn_OldLine then
    with Edit do begin
      WasSel := SelStart;
      WasSelLen := SelLength;

      // Fjern fokus så der ikke kommer sorte streger
      SendMessage(Handle, WM_KILLFOCUS, 0, 0);
      SelStart := Edit.Perform(EM_LINEINDEX, L, 0);
      SelLen := Length( Lines[L] );
      SelAttributes.Color := clMaroon; // Ret dette til efter eget behov

      SelStart := Perform( EM_LINEINDEX, Syn_OldLine, 0, 0);
      SelLength := Length( Lines[Syn_OldLine] );
      SelAttributes.Color := Font.Color;

      SelStart := WasSel;
      SelLength := WasSelLen;

      if Enabled and Visible then
          SetFocus;
    end;

  Syn_OldLine := L;
end;

Jeg har ikke lige Delphi ved hånden, men jeg tror at det vil virke.
Avatar billede klasker Nybegynder
08. oktober 2003 - 15:05 #2
Rettelse!! Brug ikke den ovenstående kode!!

procedure TMainForm.SyneditSelectionChange(Sender: TObject);
var
  L, WasSel, WasSelLen: Integer;
  Edit: TSynEdit;
begin
  Edit := TSynEdit(Sender);
  L := Edit.Perform( EM_LINEFROMCHAR, 0, 0 );
  if L <> Syn_OldLine then
    with Edit do begin
      WasSel := SelStart;
      WasSelLen := SelLength;
      OnSelectionChange := nil;

      // Fjern fokus så der ikke kommer sorte streger
      SendMessage(Handle, WM_KILLFOCUS, 0, 0);
      SelStart := Edit.Perform(EM_LINEINDEX, L, 0);
      SelLen := Length( Lines[L] );
      SelAttributes.Color := clMaroon; // Ret dette til efter eget behov

      SelStart := Perform( EM_LINEINDEX, Syn_OldLine, 0, 0);
      SelLength := Length( Lines[Syn_OldLine] );
      SelAttributes.Color := Font.Color;

      SelStart := WasSel;
      SelLength := WasSelLen;

      OnSelectionChange := MainForm.SynEditSelectionChange;
      if Enabled and Visible then
          SetFocus;
    end;

  Syn_OldLine := L;
end;

I den anden kommer der vist en uendelig løkke.
Avatar billede klasker Nybegynder
08. oktober 2003 - 15:08 #3
Doh! Endnu en fejl:
  L := Edit.Perform( EM_LINEFROMCHAR, 0, 0 );
skal rettes til:
  L := Edit.Perform( EM_LINEFROMCHAR, SelStart, 0 );
Avatar billede klasker Nybegynder
08. oktober 2003 - 15:08 #4
Jeg er god til det med fejl i dag:
  L := Edit.Perform( EM_LINEFROMCHAR, Edit.SelStart, 0 );

Nu håber jeg ikke at der er flere fejl ;)
Avatar billede athlon-pascal Juniormester
08. oktober 2003 - 17:22 #5
SynEdit er ikke som RichEdit, den er ren VCL...
Avatar billede klasker Nybegynder
08. oktober 2003 - 17:30 #6
Hvad er VCL?
Avatar billede athlon-pascal Juniormester
08. oktober 2003 - 17:31 #7
Visual Component Library :-)
Avatar billede mr.meincke Nybegynder
08. oktober 2003 - 20:11 #8
Har siddet inde på Jubii de sidste par dage sry jeg ikke svarede osv :-)
Avatar billede mr.meincke Nybegynder
09. oktober 2003 - 18:14 #9
SelLength findes ikke i en synedit :)
Avatar billede athlon-pascal Juniormester
09. oktober 2003 - 19:09 #10
I din SynEdits OnSpecialLineColors-event skal du skrive noget i retning af denne kode:

procedure TForm1.SynEdit1SpecialLineColors(Sender: TObject; Line: Integer;
  var Special: Boolean; var FG, BG: TColor);
begin
  if Line = SynEdit1.CaretY then
  begin
    FG := clYellow;
    BG := clRed;
  end;
end;

I din SynEdits OnStatusChange-event skal du skrive noget i retning af dette:

procedure TForm1.SynEdit1StatusChange(Sender: TObject;
  Changes: TSynStatusChanges);
begin
  if (scCaretY in Changes) then //Hvis cursoren skifter linje, skal SynEdit'en opdateres
    SynEdit1.Repaint;
end;
Avatar billede athlon-pascal Juniormester
09. oktober 2003 - 19:14 #11
Og nej, SelLength findes ikke. Det gør SelStart derimod, og SelEnd. Derudover er der CaretX og CaretY :-)

Hvis der er nogen der stadigvæk tror, at SynEdit er direkte sammenlignelig med RichEdit, så vil jeg atter understrege, at det er den ikke.
Jer der ikke kender SynEdit, kan jo evt. prøve at kigge på http://synedit.sf.net, hvor i kan hente den fulde kode.
Da man ikke bare lige kan få den fulde kode til RichEdit (RichEdit er en del af Windows, og Microsoft er ikke ligefrem kendt for at lave OpenSource), er det ikke svært at regne ud, at de ikke er baseret på samme kode.

Desuden er de meget forskellige, SynEdit kan sammenlignes med Delphis editor :-)
Avatar billede mr.meincke Nybegynder
09. oktober 2003 - 20:20 #12
Virker athlon! Tak skat!! :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester