Sortierung von TMemo bei Programmstart

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Calanda
Beiträge: 6
Registriert: Di 21. Jun 2022, 07:18
OS, Lazarus, FPC: Windows 10, L 2.0.12 FPC 3.2.0
CPU-Target: 64Bit

Sortierung von TMemo bei Programmstart

Beitrag von Calanda »

Hallo liebe Community
Ich möchte beim Start meiner Applikation in einem TMemo den Inhalt einer Textdatei darstellen.
Das funktioniert wunderbar.
Ebenfalls soll das TMemo bis zuunterst scrollen, sodass die aktuellsten Einträge ersichtlich sind. Das funktioniert z.B. per Button perfekt, aber nicht beim Start der Applikation.
Ich habe den Code jeweils im FormCreate und im FormShow versucht, funktioniert leider nicht.
Wie bekomme ich das hin?

Code: Alles auswählen

Liste.Lines.Clear;
Liste.Lines.LoadFromFile(LogFileLink);
Liste.SelStart := Length(Liste.Text);
Ich sage jetzt schon mal vielen Dank für Tips und Tricks.
Gruss Calanda

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Sortierung von TMemo bei Programmstart

Beitrag von theo »

Mach ein

Code: Alles auswählen

Application.ProcessMessages;
vor dem Liste.SelStart :=...

Calanda
Beiträge: 6
Registriert: Di 21. Jun 2022, 07:18
OS, Lazarus, FPC: Windows 10, L 2.0.12 FPC 3.2.0
CPU-Target: 64Bit

Re: Sortierung von TMemo bei Programmstart

Beitrag von Calanda »

Danke für den Tip, hat leider nicht funktioniert... :?
Kann es daran liegen, dass ich in einem TEdit ebenfalls ein SetFocus mache?

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Sortierung von TMemo bei Programmstart

Beitrag von Frank Ranis »

Hallo Calanda,

habe es so hinbekommen .
Nicht schön , aber !

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
 Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

 { TForm1 }

 TForm1 = class(TForm)
  Memo1: TMemo;
  procedure FormCreate(Sender: TObject);
  procedure FormPaint(Sender: TObject);
 private

 public

 end;

var
 Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
 memo1.lines.LoadFromFile('Neues Textdokument.txt');
 Tag:=-1;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 if Tag=-1
  then
   begin
    memo1.SelStart := Length(memo1.Text);
    tag:=0;
   end;
end;

end. 
Gruß

Frank
www.flz-vortex.de

Calanda
Beiträge: 6
Registriert: Di 21. Jun 2022, 07:18
OS, Lazarus, FPC: Windows 10, L 2.0.12 FPC 3.2.0
CPU-Target: 64Bit

Re: Sortierung von TMemo bei Programmstart

Beitrag von Calanda »

Hallo Frank
Vielen Dank, funktioniert wunderbar!
Danke und liebe Grüsse aus der Schweiz!

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Sortierung von TMemo bei Programmstart

Beitrag von theo »

Calanda hat geschrieben:
Mo 25. Sep 2023, 14:31
Danke für den Tip, hat leider nicht funktioniert... :?
Kann es daran liegen, dass ich in einem TEdit ebenfalls ein SetFocus mache?
Hast du es in OnShow ausprobiert?
Bei mir funktioniert es so:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  Liste.Lines.LoadFromFile('/home/theo/win.txt');
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Application.ProcessMessages;
  Liste.SelStart := Length(Liste.Text);
end;    
@Frank: OnPaint würde ich dafür eher nicht nehmen.
OnActivate würde sich für diesen Weg anbieten.

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Sortierung von TMemo bei Programmstart

Beitrag von Frank Ranis »

Hallo theo,

Code: Alles auswählen

procedure TForm1.FormShow(Sender: TObject);
begin
 application.ProcessMessages;
 memo1.SelStart := Length(memo1.Text);
end;
hat unter Win-10 leider nicht funktioniert , unter Linux-Mint schon.

Der Tipp mit

Code: Alles auswählen

procedure TForm1.FormActivate(Sender: TObject);
begin
 memo1.SelStart := Length(memo1.Text);
end;
funzt unter Win und Linux.

Sehr schön , kann man sich meinen ersten Schnellschuss mit dem Tag:=-1, usw.
sparen
und application.ProcessMessages;
braucht es dann auch nicht .

Wenn man auf verschiedenen Plattformen und Widget unterwegs ist erlebt man immer wieder neue Überraschungen .
Und man muß wirklich jedes Programmdetail austesten .

Gruß

Frank
www.flz-vortex.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6118
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Sortierung von TMemo bei Programmstart

Beitrag von af0815 »

Ich nutze immer den ersten Aufruf von FormActivate für Initialisierungen vom Programm. Das ist IMHO der beste Zeitpunkt, weil zu diesem Zeitpunkt ganze einfach alles schon stabil ist und ich sicher gehen kann, das die Komponenten alle ihre initialisierung durchlaufen haben. Hier erstelle ich auch alle Fenster die ich benötige und die nicht als Singleton oder dynamisch erzeugt sonst verwendet werden.

Einfach mit einem Flag gegen wiederholtes Aufrufen schützen und das ganze System wird auf allen mir bekannten Plattformen stabil. (War mit Delphi vor Jahrzehnten schon dasselbe, dort habe ich mich auch herumgeärgert, bis ich es auf das Schema umgestellt habe)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten