AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Datensatz laden - ComboBox bleibt beim Ladevorgang offen
Thema durchsuchen
Ansicht
Themen-Optionen

Datensatz laden - ComboBox bleibt beim Ladevorgang offen

Ein Thema von Yheeky · begonnen am 27. Jan 2007 · letzter Beitrag vom 27. Jan 2007
Antwort Antwort
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

Datensatz laden - ComboBox bleibt beim Ladevorgang offen

  Alt 27. Jan 2007, 14:04
Hi,

ich lasse über eine ComboBox einen Datensatz in eine ListView laden. Bei größeren Datenmengen kommt es zu dem unschönen Effekt, dass die ComboBox erst zugeht, wenn der Datensatz geladen wurde (bei kleinen vermutlich auch, aber da sehe ich es nicht). Wie kann ich die ComboBox schließen und erst im Anschluss die Daten laden lassen? Mit BeginUpdate und EndUpdate habe ich es schon verbessert, doch ganz weg wird es (vor allem auf langsameren Rechnern) nicht sein. Muss ich hier Application.ProcessMessages verwenden (und wenn ja, wo muss es platziert werden?)

Danke schonmal im Voraus!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Datensatz laden - ComboBox bleibt beim Ladevorgang offen

  Alt 27. Jan 2007, 14:22
Zeig mal den zugehörigen Code
Markus Kinzler
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#3

Re: Datensatz laden - ComboBox bleibt beim Ladevorgang offen

  Alt 27. Jan 2007, 15:16
Okay, hier ist der Code.

Delphi-Quellcode:
procedure TfrmMain.cZeitChange(Sender: TObject);
var
  I : Integer;
  Dateiname: string;
  Eintrag: TListItem;

begin
ListView.Items.Clear;

if FileExists(Dateiname) then
    begin
    try
     JVSimpleXML.LoadFromFile(Dateiname);
    finally
    ListView.BeginUpdate();

    for I := 1 to JVSimpleXML.Root.Items.Count-1 do
       begin
       Eintrag := ListView.Items.Add;

       if JVSimpleXML.Root.Items[I].Items.ItemNamed[XMLType].Value = '0then
       Eintrag.Caption := 0;

       if JVSimpleXML.Root.Items[I].Items.ItemNamed[XMLKuerzel].Value = 'Jathen
       Eintrag.SubItems.Add('1')
       else
       Eintrag.SubItems.Add('2');

       Eintrag.SubItems.Add(JVSimpleXML.Root.Items[I].Items.ItemNamed[XMLText].Value);
       Eintrag.SubItems.Add(JVSimpleXML.Root.Items[I].Items.ItemNamed[XMLUhrzeit].Value);
       end;

    ListView.EndUpdate();

    end;
    end;

  end;

end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Datensatz laden - ComboBox bleibt beim Ladevorgang offen

  Alt 27. Jan 2007, 15:18
Laß mal .BeginUpdate()/.EndUpdate() wg.
Markus Kinzler
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Datensatz laden - ComboBox bleibt beim Ladevorgang offen

  Alt 27. Jan 2007, 15:25
Moin Christian,

das hat zwar mit Deinem Problem nichts zu tun, aber:

So wie Du das try/finally angewendet hast, ist es relativ sinnlos.
Egal ob die Datei erfolgreich geladen werden konnte oder nicht: Sie wird verarbeitet...

Besser, Du schreibst das try hinter das BeginUpdate, und kapselst das EndUpdate in finally/end, um sicherzustellen, dass der Listview auch dann wieder etwas anzeigt, wenn bei der Verarbeitung der Datei etwas schiefgegangen ist.

Eigentlich handelt es ich bei try/finally um den, sogenannten, Resourcenschutzblock, der dafür sorgen soll, dass belegte Resourcen auch dann wieder freigegeben werden, wenn bei deren Verarbeitung ein Fehler aufgetreten ist.

Delphi-Quellcode:
// Resource belegen
sl := TStringList.Create;
try
  // mit der Resource arbeiten
finally
  // Resource freigeben
  sl.free;
end;

// oder auch

dwHandle := CreateFile(....);
if dwHandle <> INVALID_HANDLE_VALUE then begin
  try
    // mit der Datei arbeiten
  finally
    CloseHandle(dwHandle);
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#6

Re: Datensatz laden - ComboBox bleibt beim Ladevorgang offen

  Alt 27. Jan 2007, 16:28
Zitat von Christian Seehase:
So wie Du das try/finally angewendet hast, ist es relativ sinnlos.
Egal ob die Datei erfolgreich geladen werden konnte oder nicht: Sie wird verarbeitet...
Stimmt habe das try...finally nun so angepasst, wie du geschrieben hast.

Das eigentliche Problem ist aber noch da, auch wenn ich BeginUpdate() und EndUpdate() ganz rauslasse...dann ist es sogar noch schlimmer.
  Mit Zitat antworten Zitat
marabu

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

Re: Datensatz laden - ComboBox bleibt beim Ladevorgang offen

  Alt 27. Jan 2007, 16:41
Hi Christian,

bei Eintritt in den event handler der ComboBox für OnChange() ist die DropDown-Liste bereits wieder geschlossen:

Delphi-Quellcode:
procedure TDemoForm.ComboBoxChange(Sender: TObject);
begin
  with Sender as TComboBox do
  begin
    if DroppedDown then
      ShowMessage('ick bin all zu');
  end;
end;
Vielleicht ist Windows aus irgendeinem Grund zwischenzeitlich nicht in der Lage gewesen den betreffenden Ausschnitt der Form neu zu zeichnen. Das notwendige Application.ProcessMessages würde ich noch vor der Zähl-Schleife einbringen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#8

Re: Datensatz laden - ComboBox bleibt beim Ladevorgang offen

  Alt 27. Jan 2007, 18:45
Okay, mit der Standard-Combobox funktioniert es. Ich hatte es mit einer erweiterten Komponente versucht und die hat das Problem verursacht.
Nun möchte ich aber noch den Fortschritt anzeigen lassen, aber es wird lediglich die volle ProgressBar angezeigt, wenn der Vorgang beendet wird. Wieso das?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Datensatz laden - ComboBox bleibt beim Ladevorgang offen

  Alt 27. Jan 2007, 18:54
Moin Christian,

Zitat von Yheeky:
aber es wird lediglich die volle ProgressBar angezeigt, wenn der Vorgang beendet wird. Wieso das?
Zitat von marabu:
Das notwendige Application.ProcessMessages
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#10

Re: Datensatz laden - ComboBox bleibt beim Ladevorgang offen

  Alt 27. Jan 2007, 19:02
Okay danke, es funktioniert natürlich, allerdings wieder nicht mit der erweiterten Kompo. Werde nun die normale ComboBox verwenden. Danke nochmal!
  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 19:02 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