![]() |
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:
Was mache ich da falsch?
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; 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; |
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 |
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:
ViewStyle = vsList habe ich vorher gehabt und Report nur mal zum probieren.
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 Ansonsten fällt mir nichts auf, was an den Settings merkwürdig sein könnte... Zitat:
|
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