Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TMemo scrollt bei hidden Form nicht (https://www.delphipraxis.net/109643-tmemo-scrollt-bei-hidden-form-nicht.html)

ddcool 5. Mär 2008 08:23


TMemo scrollt bei hidden Form nicht
 
Hallo zusammen,

ich würde gerne mal wissen, warum ein TMemo nur dann automatisch scrollt,
wenn die Form auf der es liegt sichtbar ist. Ich füge ganz normal mit "Memo.Lines.Add('blafasel')" eine Zeile ein.
Das klappt auch wunderbar (warum sollte es auch nicht) scrollten tut sie auch Ordnungsgemäß bei jedem Eintrag.
Blende ich nun aber die Form aus per Hide, um dann nur noch ein TrayIcon zu haben, weigert sich das Memo
bei neuen Daten weiter runter zu scrollen.
Woran liegt das? Was kann ich machen?


Danke & Grüße

ddcool

taaktaak 5. Mär 2008 08:46

Re: TMemo scrollt bei hidden Form nicht
 
Moin, Moin,
würde sagen: Macht auch nicht viel Sinn, optische Anzeigen zu aktualisieren, wenn ein Control unsichtbar ist. Das verbraucht doch nur unnötige Ressourcen. Abhilfe: Programm sorgt selbst für die Bewegung, wenn das Form aktiviert wird.

ddcool 5. Mär 2008 08:56

Re: TMemo scrollt bei hidden Form nicht
 
Jo die Frage ist jetzt, wie? :-D

Grüße

ddcool

RavenIV 5. Mär 2008 08:56

Re: TMemo scrollt bei hidden Form nicht
 
Zitat:

Zitat von ddcool
Woran liegt das? Was kann ich machen?

Weil es keinen Sinn macht, ein Objekt zu aktualisieren, das man eh nicht sieht.

Du kannst das Memo im Form.Show oder Form.Activate aktualisieren mit z.B. Memo.Refresh oder Memo.Repaint oder so,

ddcool 5. Mär 2008 09:13

Re: TMemo scrollt bei hidden Form nicht
 
Hi, leider geht das so nicht. Mit Move hab ich auch nix hinbekommen.
Ich könnt k***** :-) . Immer diese einfachen kleinen Dinge sind es, wo man sich festfrisst.
Habtz ihr noch irgendwelche Ideen?

Grüße ddcool

taaktaak 5. Mär 2008 09:17

Re: TMemo scrollt bei hidden Form nicht
 
Was ist das Ziel?
Soll bei Aktivierung die letzte Memo-Zeile in den sichtbaren Beriech gescrollt werden?

ddcool 5. Mär 2008 09:22

Re: TMemo scrollt bei hidden Form nicht
 
Genau das soll passieren. Ich habe jetzt aber überhaupt keine Ahnung, wie ich das hinbekomme.
Es gibt zwar die Funktion ScrollBy, allerding benötigt diese Funktion koordinaten.

taaktaak 5. Mär 2008 09:25

Re: TMemo scrollt bei hidden Form nicht
 
Hm, füge das mal z.B. in OnActivate ein...
Delphi-Quellcode:
Memo1.selstart:=length(memo1.text);
Memo1.Perform(em_Scrollcaret,0,0);

ddcool 5. Mär 2008 09:29

Re: TMemo scrollt bei hidden Form nicht
 
Klingt gut, funktioniert aber leider nicht.
Es ist zum verrückt verden. Ich mache folgendes um die Form zu verstecken und wieder anzuzeigen:

Verstecken bei minimieren:
Delphi-Quellcode:
procedure TfrmMain.WMSysCommand(var Msg: TWMSysCommand);
begin
  if Msg.CmdType = SC_MINIMIZE then
  begin
    TrayIcon.Visible := True;
    Self.Hide;
  end else inherited;
end;
Wieder anzeigen bei Doppelklick auf TrayIcon:
Delphi-Quellcode:
procedure TfrmMain.TrayIconDblClick(Sender: TObject);
begin
  Self.Show;
  TrayIcon.Visible := False;
end;
Vielleicht hilft das noch weiter. Ich bin mit meinem latein etwas am Ende!


Grüße

ddcool

RavenIV 5. Mär 2008 09:43

Re: TMemo scrollt bei hidden Form nicht
 
Zwei Anmerkungen:
a) Für das TrayIcon gibt es z.B. die Komponente CollTrayIcon. Die funktioniert sehr gut, es gibt jede Menge Threads hier in DP dazu.
b) Du kannst eine Message an das TMemo schicken. Hab aber die Message-ID vergessen. Benutz die DP-Suche dafür.

taaktaak 5. Mär 2008 09:44

Re: TMemo scrollt bei hidden Form nicht
 
tja, das ist jetzt etwas seltsam, hab's mal ausprobiert - bei mir funktioniert das nach
OnActivate auch nicht. Ruft man es mit einem Button auf, geht es. Mal schauen, woran es liegt :evil:

// @RavenIV - ähhmmmm, was macht denn das Perform in Post#8? Wird da 'ne Grusskarte verschickt, oder 'ne Message? :mrgreen:

taaktaak 5. Mär 2008 09:53

Re: TMemo scrollt bei hidden Form nicht
 
So fertig, falsches Event: Bau den Code in Application.OnRestore ein, dann funktioniert es!

ddcool 5. Mär 2008 09:59

Re: TMemo scrollt bei hidden Form nicht
 
Nein geht bei mir auch nicht. Arghhh! :-D

Habe jetzt:
Delphi-Quellcode:
procedure TfrmMain.RestoreForm(Sender: TObject);
begin
  Memo2.SelStart := Length(Memo2.Text);
  Memo2.Perform(EM_SCROLLCARET,0,0);
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  Application.OnRestore := RestoreForm;
end;

RavenIV 5. Mär 2008 10:03

Re: TMemo scrollt bei hidden Form nicht
 
Zitat:

Zitat von taaktaak
tja, das ist jetzt etwas seltsam, hab's mal ausprobiert - bei mir funktioniert das nach
OnActivate auch nicht. Ruft man es mit einem Button auf, geht es. Mal schauen, woran es liegt :evil:

// @RavenIV - ähhmmmm, was macht denn das Perform in Post#8? Wird da 'ne Grusskarte verschickt, oder 'ne Message? :mrgreen:

Also ich würde auf Grusskarte tippen. :corky: :cheer:

taaktaak 5. Mär 2008 10:29

Re: TMemo scrollt bei hidden Form nicht
 
Gut geraten!
Dann wissen wir ja jetzt auch, wieso es nicht funktioniert!
:love:

SirThornberry 5. Mär 2008 10:39

Re: TMemo scrollt bei hidden Form nicht
 
wurde das Form zu diesem zeitpunkt noch nie gezeigt oder war es vorher schonmal sichtbar?

ddcool 5. Mär 2008 10:40

Re: TMemo scrollt bei hidden Form nicht
 
Und wie mach ichs dann? per SendMessage oder PostMessage???

@SirThornberry:
das ist egal, weder bei den einen noch bei dem anderen funktioniert es.

taaktaak 5. Mär 2008 11:02

Re: TMemo scrollt bei hidden Form nicht
 
Nachtrag zum Thema "Grußkarte", die Delphi-Hilfe sagt zu Perform...
Zitat:

Mit Perform können Sie die Botschaftswarteschlange von Windows umgehen und eine Botschaft direkt an die Fensterprozedur des Steuerelements senden.

himitsu 5. Mär 2008 11:16

Re: TMemo scrollt bei hidden Form nicht
 
Zitat:

Zitat von taaktaak
und eine Botschaft direkt an die Fensterprozedur des Steuerelements senden.

nur wenn das Fenster (schon) existiert

Code:
function TControl.Perform(Msg: Cardinal; WParam, LParam: Longint): Longint;
var
  Message: TMessage;
begin
  Message.Msg := Msg;
  Message.WParam := WParam;
  Message.LParam := LParam;
  Message.Result := 0;
  [b]if Self <> nil then WindowProc(Message);[/b]
  Result := Message.Result;
end;
die meisten "Fenster"/Steuerelemente werden von der VCL erst erstellt, wenn sie angezeigt werden (und manchmal auch nur solange sie angezeigt werden).

evtl. hilft da ein Aufruf von (Control).HandleNeeded?

taaktaak 5. Mär 2008 11:29

Re: TMemo scrollt bei hidden Form nicht
 
Moin, Moin himitsu!
Erster SAchverhalt war mir bewusst, der Zweite hat mich überrascht - da habe ich wieder etwas gelernt. Zum konkreten Fall: Hatte die Situation nachgestellt und da hat das Perform() funktioniert. Allerdings erfolgte das Minimize per BorderIcon und das Wiederherstellen ebenfalls händisch - vermutlich wird hierin der entscheidende Unterschied begründet sein, dass es bei ddcool nicht funktioniert.

ddcool 5. Mär 2008 11:56

Re: TMemo scrollt bei hidden Form nicht
 
So ich habe es jetzt geschafft. Das war ja wohl so simpel und ich dummerchen komm nicht drauf :-D

Delphi-Quellcode:
procedure TfrmMain.TrayIconDblClick(Sender: TObject);
begin
  Self.Show;
  TrayIcon.Visible := False;
  Memo2.SelStart := Length(Memo2.Text);
  Memo2.Perform(EM_SCROLLCARET,0,0);
end;
Danke an alle für die schnelle Hilfe. Schönen Tag noch wünscht

ddcool

RavenIV 5. Mär 2008 11:59

Re: TMemo scrollt bei hidden Form nicht
 
Einen Schubser in diese Richtung hab ich Dir doch in meinem Beitrag #4 schon gegeben.
Da wolltest Du es ja nicht wahrhaben...

ddcool 5. Mär 2008 12:02

Re: TMemo scrollt bei hidden Form nicht
 
@RavenIV:

Ja deinen Vorschlag aus Post #4 habe ich ja auch wahrgenommen und ausprobiert, allerdings funktionerte es weder im OnShow, noch im OnActivate. Aber dass ich so "schlau" bin und nicht drauf komme, dass einfach nach dem Form.Show zu machen, war wohl mein Blödheit :wall:


Trotzdem nochmal DANKE!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz