Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listview resetet seine Spaltenbreite (https://www.delphipraxis.net/49293-listview-resetet-seine-spaltenbreite.html)

torud 8. Jul 2005 13:38


Listview resetet seine Spaltenbreite
 
Hallo Wissende!

Ich habe ein kleines Programm, in dem bestimmte Bilder angezeigt und geladen werden sollen. Wenn man das Projekt läd, öffne ich ein extra Fenster, welches das Vorhandensein der Bild prüft.

Je nach Zustand wird in den Listview etwas reingeschrieben. Komischerweise wird aber die Listview beim 2. Aufruf, also wenn man ein anderes Projekt läd irgendwie resetet. Ich benutze nur eine Spalte und die hat beim ersten mal eine Breite von 100% und beim 2 Aufruf nur noch 100px. Hier mein Code

Delphi-Quellcode:
procedure Tautocheck.DoAutoCheck;
var
  i,ErrCount:integer;
  myList:TListItem;
begin
  list_log.Clear; // hier lösche ich den vorherigen inhalt
  ErrCount:=0;
    for i:=0 to Form1.list_pics.Count-1 do // in dieser liste stehen die bildpfade
      begin
        myList:=list_log.Items.Add;
        if FileExists(form1.list_pics.items[i]) then
          begin
            myList.Caption:=form1.list_pics.items[i]+' vorhanden...';
            myList.ImageIndex:=12;
          end
        else
          begin
            myList.Caption:=form1.list_pics.items[i]+' nicht vorhanden!';
            myList.ImageIndex:=13;
            Inc(ErrCount);
          end;
      end;
      lbl_info.Caption:='Es wurden '+inttostr(ErrCount)+' Fehler gefunden!';
end;
Was mache ich da falsch?

Und wenn es genehmigt ist noch eine dazugehörende Frage. Die Procedure rufe ich im FormShow auf, sehe das Formular aber erst, wenn die komplette Prüfroutine beendet ist...Warum nur???

Delphi-Quellcode:
procedure Tautocheck.FormShow(Sender: TObject);
begin
        CenterForm(self);
        if autocheck.Visible=true then DoAutoCheck;
end;

marabu 8. Jul 2005 19:24

Re: Listview resetet seine Spaltenbreite
 
Hallo Tom,

an deinem gezeigten Code direkt kann es nicht liegen, dass die Spaltenbreite sich ändert. Wie (explizit oder implizit) und wo hast du die Breite festgelegt?

Den Code im Ereignis OnShow() würde ich dort nicht aufrufen. Die Prüfung auf Visible dürfte immer TRUE ergeben. Warum soll CenterForm() jedes mal wieder aufgerufen werden - ist das nicht besser im Ereignis OnCreate() aufgehoben?

Grüße vom marabu

torud 8. Jul 2005 20:26

Re: Listview resetet seine Spaltenbreite
 
Hallo Marabu!

Dann kann es doch nur an den Einstellungen der Listview liegen.

Ok, hier mal meine Settings:

Delphi-Quellcode:
  object list_log: TdxDNListView
    Left = 0
    Top = 33
    Width = 678
    Height = 204
    Align = alClient
    Columns = <>
    ReadOnly = True
    RowSelect = True
    ShowColumnHeaders = False
    SmallImages = Form1.ImageList1
    TabOrder = 0
    ViewStyle = vsReport
  end
ViewStyle = vsList habe ich vorher gehabt und Report nur mal zum probieren.

Ansonsten fällt mir nichts auf, was an den Settings merkwürdig sein könnte...

Zitat:

Den Code im Ereignis OnShow() würde ich dort nicht aufrufen. Die Prüfung auf Visible dürfte immer TRUE ergeben. Warum soll CenterForm() jedes mal wieder aufgerufen werden - ist das nicht besser im Ereignis OnCreate() aufgehoben?
Ok, CenterForm kommt ins OnCreate, aber wie kann ich sicherstellen, dass die DoAutCheck wirklich erst dann gestartet wird, wenn das Form sichtbar ist!? Ist eher nebensächlich, interssiert mich aber schon, da ich schon öfters vor diesem Problem stand.

marabu 8. Jul 2005 20:41

Re: Listview resetet seine Spaltenbreite
 
Ausgerechnet die Einstellung der Spaltenbreite zeigst du nicht. Hast du Width auf einen festen Wert gesetzt, einen berechneten oder auf einen impliziten (-1 oder -2) Wert?

Warum du unbedingt deine Prüfung von der Sichtbarkeit der Form abhängig machen willst ist mir schleierhaft. Du könntest deinen Code im Ereignis OnActivate() ausführen. Du solltest dann aber eine Wiederholungssperre einbauen, damit der Code nicht erneut ausgeführt wird, wenn du zwischen Anwendungen wechselst.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:38 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