AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Ich brauch eine Mischung zwischen Show und ShowModal
Thema durchsuchen
Ansicht
Themen-Optionen

Ich brauch eine Mischung zwischen Show und ShowModal

Ein Thema von gsh · begonnen am 23. Okt 2006 · letzter Beitrag vom 19. Aug 2009
Antwort Antwort
Seite 2 von 3     12 3      
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: Ich brauch eine Mischung zwischen Show und ShowModal

  Alt 19. Aug 2009, 05:02
Erstelle Dir einfach ein Formular ('FormLadeAnzeige') und zeige es zu Beginn des Ladevorganges mit 'FormLadeAnzeige.Show' an. Beim Beenden verbirgst Du das Formulat mit 'FormLadeAnzeige.Hide'.

Wenn Du weisst, wie viele Daten Du einliest, kannst du auch noch eine Progressbar auf der FormLadeAnzeige unterbringen, und die Position des Fortschrittsbalkens inn deiner Schleife erhöhen.

Frage: Wieso braucht das Einlesen einer Listbox so lange? Mehr als 10-50 Einträge sollten dort doch nicht drin stehen, denn wer scrollt schon 100000 Einträge durch?

Weiterhin kann man das Laden durch Verwendung der 'ListBox.Items.BeginUpdate/EndUpdate' wesentlich beschleunigen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Ich brauch eine Mischung zwischen Show und ShowModal

  Alt 19. Aug 2009, 07:11
Hallo,

die Variante mit dem Show hat den Nachteil,
dass mit dem darunterliegenden Form auch noch gearbeitet werden kann,
Hide versteckt, OK, sieht aber manchmal doof aus
Deswegen mein Ansatz mit dem "semimodal".

Nochmal der Code.

Delphi-Quellcode:
function TForm_PEP__Main.LoadData: Boolean;
var
  FrmStatus : TForm_Status;
  WindowList : Pointer;
begin
  Result:= False;

  try
    FrmStatus:= TForm_Status.Create(NIL);

    try
     { to make form "semimodal" }
      WindowList:= DisableTaskWindows(frmStatus.Handle);
      try
        // Formular anzeigen
        FrmStatus.Show;

        // Schleifenverarbeitung
        Repeat
          FrmStatus.Caption := 'Lade Daten';
          FrmStatus.Label1.Caption:= 'Daten 1';
          // Nachrichtenverarbeitung zulassen
          Application.ProcessMessages;
       // hier passiert das wichtige Daten 1

          FrmStatus.Label1.Caption:= 'Daten 2';
          // Nachrichtenverarbeitung zulassen
          Application.ProcessMessages;
       // hier passiert das wichtige Daten 2

          break;
        // bis Verarbeitung fertig oder Benutzerabbruch
        until False;
      finally
        // Semi-Modalität aufheben
        EnableTaskWindows(WindowList);
        // Fenster verstecken
        FrmStatus.Hide;
      end;
    finally
      // Fenster wieder freigeben
      FrmStatus.Free;
    end;
  except
  end;
end; { LoadData }
Definiere eine Form (TForm_Status).
Packe, wenn du willst ein Label drauf (Label 1).

Und dann in deinem Form (hier TForm_PEP__Main), den obigen Code.


Heiko
Heiko
  Mit Zitat antworten Zitat
NaPsTeRforever

Registriert seit: 1. Sep 2007
28 Beiträge
 
#13

Re: Ich brauch eine Mischung zwischen Show und ShowModal

  Alt 19. Aug 2009, 13:38
Zitat von alzaimar:
Frage: Wieso braucht das Einlesen einer Listbox so lange? Mehr als 10-50 Einträge sollten dort doch nicht drin stehen, denn wer scrollt schon 100000 Einträge durch?
Es werden mehrere Listviews gefüllt mit Daten aus dem Internet!

@hoika
Habe nun eine Form und die Funktion ins Hauptpogramm gepackt!
Jetzt habe ich eine Button procedure (login) die eben nach erfolgreichem login die ganzen Listviews füllt.
Wo wie schreib ich da jetzt was rein um deine Function zu nutzen?!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: Ich brauch eine Mischung zwischen Show und ShowModal

  Alt 19. Aug 2009, 14:00
Hallo,

// hier passiert das wichtige Daten 1
// hier passiert das wichtige Daten 2

genau hier packst du das Laden rein.
In meinem ursprünglichen Posting hiess das noch InternalLoad,
weil ich das LV-Füllen nicht in diesen ganzen Form-Code reinpacke,
sondern in eine Extra-Methode.


Heiko
Heiko
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#15

Re: Ich brauch eine Mischung zwischen Show und ShowModal

  Alt 19. Aug 2009, 14:13
Wie wär's damit:

Aktion in eine Klasse packen. Die Klasse instanziieren und mit allen nötigen Daten versorgen. Anschließend das Wait-Form via showModal aufrufen und dort mit der Klasse die eigentliche Funtkion ausführen. Wenn die fertig ist das Form wieder zu machen.

Kann man so ausbauen, dass es eine Art Pseudo-Thread ist. Also beispielsweise mit einer festen run() Methode und Events, an denen man den Fortschritt einer Progressbar festmachen kann.

Gelobt sei OOP
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#16

Re: Ich brauch eine Mischung zwischen Show und ShowModal

  Alt 19. Aug 2009, 14:21
Hallo,

dann aber eine Basisklasse mit virtuell/abstrakten Methoden
(die benutzt dann das Info-Form)
und Ableitung der Load-Klasse von dieser Basisklasse.

Oder Interfaces ...


Heiko
Heiko
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#17

Re: Ich brauch eine Mischung zwischen Show und ShowModal

  Alt 19. Aug 2009, 14:30
Stimmt, hätte ich dazu schreiben können. Ich geh halt davon aus, dass Programmierer im Jahr 2009 das OO Paradigma verstanden haben sollten bevor sie Programme schreiben.
  Mit Zitat antworten Zitat
NaPsTeRforever

Registriert seit: 1. Sep 2007
28 Beiträge
 
#18

Re: Ich brauch eine Mischung zwischen Show und ShowModal

  Alt 19. Aug 2009, 14:53
Zitat von hoika:
Hallo,

// hier passiert das wichtige Daten 1
// hier passiert das wichtige Daten 2

genau hier packst du das Laden rein.
In meinem ursprünglichen Posting hiess das noch InternalLoad,
weil ich das LV-Füllen nicht in diesen ganzen Form-Code reinpacke,
sondern in eine Extra-Methode.


Heiko
ok super soweit verstanden
Muss ich halt nur meine procedure irgendwie auseinanderpflücken bzw in gewissen Abständen dieses Application.ProcessMessages; einfügen!
Kann ich anstelle des Labels nicht eine progressbar nehmen, will eigtl eine visuelle Fortschrittsanzeige haben oder mit Prozent irgendwas?!

Den Rest der Beiträge peil ich leider nicht, bin keine Programmierer, nur ein Noob der keine Ahnung hat und Langeweile
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#19

Re: Ich brauch eine Mischung zwischen Show und ShowModal

  Alt 19. Aug 2009, 15:08
Wenn du eh Langeweile hast, dann wäre das der ideale Moment um sich mit dem Begriff "Abstrakte Klassen / Methoden" vertraut zu machen ;
  Mit Zitat antworten Zitat
NaPsTeRforever

Registriert seit: 1. Sep 2007
28 Beiträge
 
#20

Re: Ich brauch eine Mischung zwischen Show und ShowModal

  Alt 19. Aug 2009, 15:18
Zitat von mquadrat:
Wenn du eh Langeweile hast, dann wäre das der ideale Moment um sich mit dem Begriff "Abstrakte Klassen / Methoden" vertraut zu machen ;
kein Bedarf danke


Habe den waitscreen von heiko jetzt am laufen und brauche nur noch einen kleinen Tipp bzgl einer Progressbar!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 07:45 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