AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listview resetet seine Spaltenbreite

Ein Thema von torud · begonnen am 8. Jul 2005 · letzter Beitrag vom 8. Jul 2005
Antwort Antwort
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Listview resetet seine Spaltenbreite

  Alt 8. Jul 2005, 13:38
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;
Danke
Tom
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Listview resetet seine Spaltenbreite

  Alt 8. Jul 2005, 19:24
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
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Listview resetet seine Spaltenbreite

  Alt 8. Jul 2005, 20:26
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.
Danke
Tom
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Listview resetet seine Spaltenbreite

  Alt 8. Jul 2005, 20:41
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz