AGB  ·  Datenschutz  ·  Impressum  







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

Form nicht zu sehen !?

Ein Thema von haentschman · begonnen am 2. Mär 2008 · letzter Beitrag vom 2. Mär 2008
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

Form nicht zu sehen !?

  Alt 2. Mär 2008, 10:36
Guten Morgen alle..

ich brauche mal wieder Eure Hilfe.

- ich bekomme meine Form erst ganz kurz nach dem Dateidownload ( 3 Dateien ) zu sehen.
- Application.ProcessMessages oder IdAntiFreeze haben keine Auswirkung

Was passieren soll: die exe startet, lädt die Dateien ( optische Kontrolle ProgressBar ) und schließt sich wieder.

Delphi-Quellcode:
procedure TFUMain.FormShow(Sender: TObject);
var A: Integer;

begin
  JvXPProgressbar1.Position:= 0;
  INIEinlesen;
  UINIEinlesen;

  for A := 1 to UFiles do
    begin
      FileINI(IntToStr(A));
      DateiDownload(USource,UZiel);
    end;

  VersionDatum:= UVersionDatum;
  INISchreiben;
  ShellExecute(Application.Handle,'open',PChar('eAV.exe'),NIL,NIL,SW_SHOWNORMAL);
  Application.Terminate;
end;


procedure TFUMain.DateiDownload(Source, Ziel: String);
var
  fStream: TFileStream;
  TempZiel: String;
begin
  JvXPProgressBar1.Position:= 0;
  JvXpProgressBar1.Refresh;
  if Copy(Ziel,1,2) ='DBthen
    begin
      if DBHost = 'then
        begin
          TempZiel:= DBOrdnerL + Copy(Ziel,3,Length(Ziel)-2);
        end
          else
            begin
              TempZiel:= DBOrdnerN + Copy(Ziel,3,Length(Ziel)-2);
            end;
    end
      else
        begin
          TempZiel:= InstallPfad + '\' + Ziel;
        end;
  Ziel:= TempZiel;
  JvLabel1.Caption:= 'Download nach: ' + Ziel + '...';
  JvLabel1.Refresh;
  try
    fStream:= TFileStream.Create(Ziel,fmCreate or fmShareDenyNone);
  try
    idHTTP1.Get(Source, fStream);
  finally
    fStream.Free;
  end;
  except
    ShellExecute(Application.Handle,'open',PChar('eAV.exe'),NIL,NIL,SW_SHOWNORMAL);
    Application.Terminate;
  end;
end;

procedure TFUMain.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
begin
  JvXPProgressBar1.Position:= AWorkCount;
  Application.ProcessMessages;
end;

procedure TFUMain.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Integer);
begin
  JvXPProgressBar1.Max:= AWorkCountMax;
end;
wo habe ich den Denkfehler ?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Form nicht zu sehen !?

  Alt 2. Mär 2008, 10:38
Die Stelle an der du es hast ist schuld. OnShow könnte auch heißen: OnDirectBeforeShow
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#3

Re: Form nicht zu sehen !?

  Alt 2. Mär 2008, 10:45
Danke für die schnelle Reaktion...

OnDirectBeforeShow kennt mein ObjectInspector der Form nicht

Im Prinzip war dieser Effekt ja logisch, da ja OnShow nicht erst ausgelöst wird nach Anzeige der Form sondern beim setzen visible:= true
Ich dachte aber, daß mit Application.Processmessages die Form dann doch zu sehen ist.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#4

Re: Form nicht zu sehen !?

  Alt 2. Mär 2008, 10:49
Nein, er meinte damit, das das Ereignis OnShow nicht nach, sondern unmittelbar vor dem Anzeigen ausgelöst wird. Das heisst Du machst die ganze Arbeitet tatsächlich _vor_ dem Anzeigen des Forms.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#5

Re: Form nicht zu sehen !?

  Alt 2. Mär 2008, 10:53
Moin, Moin,
also wäre eine mögliche Lösung: Du deklarierst eine eigene Proc "AfterShow", die auf eine von dir definierte WM_UserMessage reagiert. Als letzte Zeile in OnShow sendest du selbst die WM_UserMessage ab. Dann sollte es funktionieren
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#6

Re: Form nicht zu sehen !?

  Alt 2. Mär 2008, 10:56
tja und wie positioniere ich die "Arbeit" nach OnShow ?

OnPaint OnActivate sind ja eher ungünstig, da sie bei Neuzeichnen, Focuswechsel immer aufs neue ausgelöst werden.

was würdet ihr von einem TimerEvent halten, Timer in in OnShow starten (1s) und im OnTimer die Arbeit.
ist so was unsauber ?


@ taaktaak: Keine schlechte Idee
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Form nicht zu sehen !?

  Alt 2. Mär 2008, 11:06
Zitat:
OnPaint OnActivate sind ja eher ungünstig, da sie bei Neuzeichnen, Focuswechsel immer aufs neue ausgelöst werden.
das lässt sich doch abfangen
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  is_first_call := TRUE;
end;

procedute TForm1.FormPaint(Sender: TObject);
begin
  if (is_first_call) then
  begin
    is_first_call := False;
    //do what you want;
  end;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#8

Re: Form nicht zu sehen !?

  Alt 2. Mär 2008, 11:12
Das mit der Boolean würde ich lieber im Activate machen, sonst verzögert sich das Zeichnen um die Arbeitszeit, und das ist eher wieder ungeschickt.

Ins Paint würde ich nie zeitintensive Aufgaben legen. Aber sonst ist der Ansatz prinzipiell nicht schlecht.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#9

Re: Form nicht zu sehen !?

  Alt 2. Mär 2008, 11:14
Danke für Eure zahlreichen Tipps...

habe jetzt:
Delphi-Quellcode:
const
  WM_FERTIG = WM_USER + 100;
procedure HabeFertig(var Msg: TMessage); Message WM_FERTIG;
Delphi-Quellcode:
procedure TFUMain.FormShow(Sender: TObject);
begin
  JvXPProgressbar1.Position:= 0;
  INIEinlesen;
  UINIEinlesen;
  PostMessage(Handle, WM_FERTIG, 0, 0);
end;
Delphi-Quellcode:
procedure TFUMain.HabeFertig(var Msg: TMessage);
var A: Integer;
begin
  for A := 1 to UFiles do
    begin
      FileINI(IntToStr(A));
      DateiDownload(USource,UZiel);
    end;
  VersionDatum:= UVersionDatum;
  INISchreiben;
  ShellExecute(Application.Handle,'open',PChar('eAV.exe'),NIL,NIL,SW_SHOWNORMAL);
  Application.Terminate;
end;
...und es arbeitet doch

Danke an alle.
  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 17:10 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