Zwischen 2 SynEdit Zeilen kopieren

Für Fragen von Einsteigern und Programmieranfängern...

Zwischen 2 SynEdit Zeilen kopieren

Beitragvon Robologe » 7. Mai 2017, 07:44 Zwischen 2 SynEdit Zeilen kopieren

Habe 2 SynEdits und möchte diese laufend vergleichen ist ein Unterschied soll die Statusleiste von grün auf rot wechseln die Zeilennummer und Position ausgegeben werden;
Ich habe da so Probleme wie Wie kann ich die aktuelle Länge des SynEdit.Lines abfragen (Zeilenanzahl)

Vielleicht hat jemand so Beispiele in seiner Ablage
Danke !!
Robologe
 
Beiträge: 11
Registriert: 2. Mai 2017, 12:00

Beitragvon theo » 7. Mai 2017, 09:56 Re: Zwischen 2 SynEdit Zeilen kopieren

Robologe hat geschrieben:Ich habe da so Probleme wie Wie kann ich die aktuelle Länge des SynEdit.Lines abfragen (Zeilenanzahl)


Code: Alles auswählen
SynEdit1.Lines.Count;
theo
 
Beiträge: 7880
Registriert: 11. Sep 2006, 18:01

Beitragvon Robologe » 9. Mai 2017, 02:28 Re: Zwischen 2 SynEdit Zeilen kopieren

Danke für die Info
Es steht schon wieder die nächste Frage an
Wie kann ich von zwei Synedit Fenster ; wenn ich im linken nach unten scrolle das zweite mitscrollen lassen
Robologe
 
Beiträge: 11
Registriert: 2. Mai 2017, 12:00

Beitragvon Robologe » 9. Mai 2017, 02:44 Re: Zwischen 2 SynEdit Zeilen kopieren

Danke für die Info
Es steht schon wieder die nächste Frage an
Wie kann ich von zwei Synedit Fenster ; wenn ich im linken nach unten scrolle das zweite mitscrollen lassen
Robologe
 
Beiträge: 11
Registriert: 2. Mai 2017, 12:00

Beitragvon theo » 9. Mai 2017, 10:01 Re: Zwischen 2 SynEdit Zeilen kopieren

Abgleichen kann man sie so:

Code: Alles auswählen
Synedit2.TopLine:=Synedit1.TopLine;


Das Problem ist, das Scroll Event mitzukriegen. Ich würde vllt. der Einfachheit halber einen TTimer dafür nehmen.
theo
 
Beiträge: 7880
Registriert: 11. Sep 2006, 18:01

Beitragvon Michl » 9. Mai 2017, 10:10 Re: Zwischen 2 SynEdit Zeilen kopieren

In einem Projekt benötigte ich gleichscrollende TStringGrids. Dort habe ich das so gemacht (nur unter Windows getestet):

Eine eigene Komponente (man kann aber auch den Typ TStringGrid im eigen Formular überschreiben):
Code: Alles auswählen
type
  TScrollStringGrid = class(TStringGrid)
  private
    FOnScroll: TNotifyEvent;
  public
    procedure WndProc(var TheMessage: TLMessage); override;
  published
    property OnScroll: TNotifyEvent read FOnScroll write FOnScroll;
  end;
...
procedure TScrollStringGrid.WndProc(
  var TheMessage: TLMessage);
begin
  case TheMessage.Msg of
    {LM_HSCROLL, }LM_VSCROLL:
      if not (csDesigning in ComponentState) and
        Assigned(FOnScroll) then FOnScroll(Self);
  end;
  inherited WndProc(TheMessage);
end;

Im Formular:
Code: Alles auswählen
type
  TForm1 = class(TForm)
...
  private
    FScrollUpdating: Boolean;
  end;
...
procedure TForm1.GridScroll(Sender: TObject);
begin
  if Assigned(Sender) then
    Application.QueueAsyncCall(@ScrollGrid, PtrInt(Sender));
end;
 
procedure TForm1.ScrollGrid(Data: PtrInt);
var
  SG: TStringGrid;
begin
  if csDesigning in ComponentState then Exit;
  if csDestroying in ComponentState then Exit;
  if FScrollUpdating then Exit;
 
  FScrollUpdating := True;
  SG := TStringGrid(TObject(Data));
  if Assigned(SG) then begin
    ScrollGrid1.TopRow := SG.TopRow;
    ScrollGrid1.Row := SG.Row;
    ScrollGrid2.TopRow := SG.TopRow;
    ScrollGrid2.Row := SG.Row;
  end;
  FScrollUpdating := False;
end;

Mit einem Synedit kann man das sicherlich ähnlich machen.
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2169
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon martin_frb » 11. Mai 2017, 11:03 Re: Zwischen 2 SynEdit Zeilen kopieren

theo hat geschrieben:Abgleichen kann man sie so:

Code: Alles auswählen
Synedit2.TopLine:=Synedit1.TopLine;


Das Problem ist, das Scroll Event mitzukriegen. Ich würde vllt. der Einfachheit halber einen TTimer dafür nehmen.


SynEdit.OnStatusChanged wird fuer topline changes getriggered.

Code: Alles auswählen
 
  property OnStatusChange: TStatusChangeEvent
 
  TStatusChangeEvent = procedure(Sender: TObject; Changes: TSynStatusChanges)
    of object;
  TSynStatusChange = (scCaretX, scCaretY,
    scLeftChar, scTopLine, scLinesInWindow, scCharsInWindow,
    scInsertMode, scModified, scSelection, scReadOnly,
    scFocus,     // received or lost focus
    scOptions    // some Options were changed (only triggered by some optinos)
   );
 


Oder benutze
Code: Alles auswählen
    procedure RegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent; AChanges: TSynStatusChanges);
    procedure UnRegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent);
 

Und filtere die Events mit AChanges.
martin_frb
 
Beiträge: 391
Registriert: 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other | 
CPU-Target: mostly 32 bit
Nach oben

Beitragvon theo » 11. Mai 2017, 11:18 Re: Zwischen 2 SynEdit Zeilen kopieren

martin_frb hat geschrieben:
theo hat geschrieben:Abgleichen kann man sie so:

Code: Alles auswählen
Synedit2.TopLine:=Synedit1.TopLine;


Das Problem ist, das Scroll Event mitzukriegen. Ich würde vllt. der Einfachheit halber einen TTimer dafür nehmen.


SynEdit.OnStatusChanged wird fuer topline changes getriggered.


Ah, dann ist das die Lösung. Wusste ich nicht.
theo
 
Beiträge: 7880
Registriert: 11. Sep 2006, 18:01

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried