Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi FormShow mit CoolTrayIcon dauert zu lange (https://www.delphipraxis.net/145484-formshow-mit-cooltrayicon-dauert-zu-lange.html)

AlexII 2. Jan 2010 16:28


FormShow mit CoolTrayIcon dauert zu lange
 
Hallo,

hab in meinem Programm die Komponente CoolTrayIcon eingebaut. Wenn ich das Programm minimiere und dann wieder maximiere bzw. anzeige, dauert es so lange bis die .ini-Datei mit allein Einstellungen eingelesen wird, es geschieht in FormShow bei mir.

Wer weiß wie man das Problem lösen kann? Die .ini in FormCreate einlesen? Darf man das überhaupt, denn nach dem Laden gleich die Abfrage statt findet, wie das Form dargestellt werden soll usw. und das klappt ab und zu nicht, da Form noch gar nicht createt ist, oder? :gruebel:

SirThornberry 2. Jan 2010 16:38

Re: FormShow mit CoolTrayIcon dauert zu lange
 
FormShow ist eindeutig die falsche stelle denn das wird mehrmalig ausgeführt, eben immer bei einem Show.
OnCreate des Forms könnte übrigens auch "OnAfterCreate" heißen, dann wäre eindeutiger das zu diesem Zeitpunkt der Erstellungsvorgang so gut wie abgeschlossen ist.

AlexII 2. Jan 2010 16:41

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Oh.. hab dieses Ereignis nicht, hab Delphi 7PE :gruebel:

Hilft es wenn ich die .ini in OnCreate lade und in OnShow auswerte? :gruebel: Oder wird es genau so lange dauern? :gruebel:

Jens Hartmann 2. Jan 2010 16:44

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Das Ereignis gibt es ja auch nicht,

Zitat:

OnCreate des Forms könnte übrigens auch "OnAfterCreate
Du musst die INI im OnCreate laden. Das ist so OK und funktioniert auch einwandfrei.

Gruß Jens

AlexII 2. Jan 2010 16:46

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Und in OnShow auswerten, oder wie? Wie macht man das normalerweise, also die Profis?

Matze 2. Jan 2010 16:52

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Versuche es komplett im OnCreate zu machen. Wie gesagt wird das OnShow-Ereignis öfters ausgeführt, sobald das Fenster angezeigt wird (minimieren -> maximieren -> OnShow).
Das OnCreate-Ereignis wird einmalig aufgerufen und ist daher gut geeignet.

Jens Hartmann 2. Jan 2010 16:53

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Also,

ich bin auf gar keinen Fall ein Profi. Und ob das so 100% richtig ist, weiß ich auch nicht. Ich kann nur sagen, das ich mit folgendem Code im OnCreate noch nie Probleme hatte.

Delphi-Quellcode:
begin
  AppDataDir := GetSpecialFolder(CSIDL_COMMON_APPDATA) + strAppDataDir;
  NetConf := TIniFile.Create(AppDataDir+strNetConf);
  with NetConf do begin
    Master := ReadInteger('ALLGEMEIN','MASTER',0);
  end;
  NetConf.Free;
  if Master = 1 then
    begin
      Panel14.Visible := false;
      Panel16.Visible := false;
      Panel4.Visible := false;
      ToolButton7.Visible := false;
      ToolButton8.Visible := false;
      Einstelleungen1.Visible := false;
      Optionen1.Visible := false;
      AnlagenSetup1.Visible := false;
      TabSheet1.Visible := false;
      SetConnectionStringDatabase;
      PSInitStartMaster;
    end
  else
    begin
      if ServiceGetStatus('', 'FirebirdGuardianDefaultInstance') = 4 then
        begin
          MMStatus.Color := clYellow;
          MMStatus.Text := 'Verbindung getrennt';
          SetConnectionStringDatabase;
          ComLoadSettings;
          PSInitStartSlave;
        end
      else
        begin
          TAufDienstWarten.Enabled := true;
          TTimeOutDienst.Enabled := true;
        end;
    end;
end;
Auch hier lese ich im oberen Bereich einen Wert aus einer INI-Datei, welche mir gewissen Komponenten Visible setzte soll.


Gruß Jens

Matze 2. Jan 2010 16:56

Re: FormShow mit CoolTrayIcon dauert zu lange
 
@Jens: Wenn du noch try-finally nutzen würdest (Resourcenschutzblöcke), dann ist es noch schöner. Im Falle einer Exception beim Zugriff auf die Ini (ReadInteger) wird die Ini-Datei dann auch freigegeben.

Delphi-Quellcode:
NetConf := TIniFile.Create(AppDataDir+strNetConf);
try
  with NetConf do begin
    Master := ReadInteger('ALLGEMEIN','MASTER',0);
  end;
finally
  NetConf.Free;
end;
Das nur, damit es Alex richtig macht.

AlexII 2. Jan 2010 16:59

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Ok :-D

Und bei mir sieht das so aus, wenn jemand lust hat guck mal durch, vielleicht gibt's da was zu verbessern. :thumb:

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var ComboIndex: Integer;
    Ini     : TIniFile;
    UserAppDataDir, ProgPath, Headline: String;
begin
UserAppDataDir:=GetSpecialFolder(CSIDL_LOCAL_APPDATA);
ProgPath:=ExtractFilePath(ParamStr(0));

if FileExists(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini') then
begin
Ini := TIniFile.Create(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini');
  try
    Headline := Ini.ReadString('Default', 'Headline', '');
    ComboBox1.ItemIndex := Ini.ReadInteger('Default', 'Channel', 1);
    TrackBar1.Position := Ini.ReadInteger('Default', 'Volume', 90);
    Form5.cbDirectConnection.Checked := Ini.ReadBool('Default', 'Proxy', True);
    Form5.ed_ProxyServer.Text := Ini.ReadString('Default', 'ProxyIP', '');
    Form1.ClientWidth := Ini.ReadInteger('Default', 'Form', 570);
    ShowDate1.Checked := Ini.ReadBool('Default', 'ShowDate', False);
    ShowTime1.Checked := Ini.ReadBool('Default', 'ShowTime', False);
    ShowPlayTime1.Checked := Ini.ReadBool('Default', 'ShowPlayTime', False);
    Form3.RadioButton1.Checked := Ini.ReadBool('Default', 'ItemPositionTop', False);
    Form3.RadioButton2.Checked := Ini.ReadBool('Default', 'ItemPositionBelow', True);
    Language := Ini.ReadString('Default', 'Language', '');
    ListBox1.TopIndex := Ini.ReadInteger('Default', 'Channelposition', 0);
    Background := Ini.ReadString('Default', 'Background', '');
    Form5.CheckBox2.Checked := Ini.ReadBool('Default', 'Traybarwhenmin', False);
    Form5.LabeledEdit1.Text := Ini.ReadString('Default', 'Headline', '');
  finally
    Ini.Free;
end;

if Form5.CheckBox2.Checked=True then
begin
CoolTrayIcon1.Enabled:=True;
CoolTrayIcon1.MinimizeToTray:=True;
end;

ComboIndex:=ComboBox1.ItemIndex;

if ShowDate1.Checked=True then
begin
Label10.Visible:=True;
Label10.Caption:=FormatDateTime('dddd, d. mmmm yyyy', date);
end else Label10.Visible:=False;

if ShowTime1.Checked=True then
begin
Label11.Visible:=True;
Label11.Caption:=FormatDateTime('tt', time);
end else Label11.Visible:=False;
end;

if ShowPlayTime1.Checked=True then
begin
Image28.Visible:=True;
Label6.Visible:=True;
end else
    begin
    Image28.Visible:=False;
    Label6.Visible:=False;
    end;
   
if Form1.ClientWidth=407 then
begin
Image11.Visible := False;
Image10.Visible := True;

Label10.Caption:='Label10';
Label10.Left:=348; //344
Label10.Caption:=FormatDateTime('dddd, d. mmmm yyyy', date);

Label11.Caption:='Label11';
Label11.Left:=361; //360
Label11.Caption:=FormatDateTime('tt', time);
end else
    begin
    Image11.Visible := True;
    Image10.Visible := False;

    Label10.Caption:='Label10';
    Label10.Left:=511; //507
    Label10.Caption:=FormatDateTime('dddd, d. mmmm yyyy', date);

    Label11.Caption:='Label11';
    Label11.Left:=524; //523
    Label11.Caption:=FormatDateTime('tt', time);
    end;

case ComboBox1.Itemindex of
3: Image9.Visible := False;
7: Image9.Visible := False;
21: Image9.Visible := False;
22: Image9.Visible := False;
24: Image9.Visible := False;
25: Image9.Visible := False;
end;

vol := TrackBar1.Position;
cbDirectConnectionClick(Sender);

if Language='English' then
begin
//Form1
AutoUpgrader1.InfoFileURL:='http://xxx/update/autoupgrade_en.cgi';
Font.Charset := DEFAULT_CHARSET;
Label2.Font.Charset := DEFAULT_CHARSET;
Label10.Font.Charset := DEFAULT_CHARSET;
GroupBox1.Font.Charset := DEFAULT_CHARSET;
Label9.Font.Charset := DEFAULT_CHARSET;
ComboBox1.Font.Charset := DEFAULT_CHARSET;

GroupBox1.Font.Charset := DEFAULT_CHARSET;

GroupBox2.Font.Charset := DEFAULT_CHARSET;
Label3.Font.Charset := DEFAULT_CHARSET;
Label4.Font.Charset := DEFAULT_CHARSET; //?

UseLanguage('EN');
RetranslateComponent(Self);
English1.Enabled:=False;
German1.Enabled:=True;
Russian1.Enabled:=True;

if ComboBox1.ItemIndex=-1 then ComboBox1.ItemIndex:=ComboIndex;
end else if Language='German' then
         begin
         //Form1
         AutoUpgrader1.InfoFileURL:='http://xxx/update/autoupgrade_en.cgi';
         Font.Charset := DEFAULT_CHARSET;
         Label2.Font.Charset := DEFAULT_CHARSET;
         Label10.Font.Charset := DEFAULT_CHARSET;
         GroupBox1.Font.Charset := DEFAULT_CHARSET;
         Label9.Font.Charset := DEFAULT_CHARSET;
         ComboBox1.Font.Charset := DEFAULT_CHARSET;

         GroupBox1.Font.Charset := DEFAULT_CHARSET;

         GroupBox2.Font.Charset := DEFAULT_CHARSET;
         Label3.Font.Charset := DEFAULT_CHARSET;
         Label4.Font.Charset := DEFAULT_CHARSET; //?

         UseLanguage('de_DE');
         ReTranslateComponent(Self);
         English1.Enabled:=True;
         German1.Enabled:=False;
         Russian1.Enabled:=True;

         if ComboBox1.ItemIndex=-1 then ComboBox1.ItemIndex:=ComboIndex;
         end else if Language='Russian' then
                  begin
                  //Form1
                  AutoUpgrader1.InfoFileURL:='http://xxx/update/autoupgrade_ru.cgi';
                  Font.Charset := RUSSIAN_CHARSET;
                  Label2.Font.Charset := RUSSIAN_CHARSET;
                  Label10.Font.Charset := RUSSIAN_CHARSET;
                  GroupBox1.Font.Charset := RUSSIAN_CHARSET;
                  Label9.Font.Charset := RUSSIAN_CHARSET;
                  ComboBox1.Font.Charset := RUSSIAN_CHARSET;

                  GroupBox1.Font.Charset := RUSSIAN_CHARSET;

                  GroupBox2.Font.Charset := RUSSIAN_CHARSET;
                  Label3.Font.Charset := RUSSIAN_CHARSET;
                  Label4.Font.Charset := RUSSIAN_CHARSET; //?

                  UseLanguage('ru_RU');
                  ReTranslateComponent(Self);
                  English1.Enabled:=True;
                  German1.Enabled:=True;
                  Russian1.Enabled:=False;

                  if ComboBox1.ItemIndex=-1 then ComboBox1.ItemIndex:=ComboIndex;
                  end else
                      begin

                      if (GetCurrentLanguage()='EN') then
                      begin
                      //Form1
                      AutoUpgrader1.InfoFileURL:='http://xxx/update/autoupgrade_en.cgi';
                      Font.Charset := DEFAULT_CHARSET;
                      Label2.Font.Charset := DEFAULT_CHARSET;
                      Label10.Font.Charset := DEFAULT_CHARSET;
                      GroupBox1.Font.Charset := DEFAULT_CHARSET;
                      Label9.Font.Charset := DEFAULT_CHARSET;
                      ComboBox1.Font.Charset := DEFAULT_CHARSET;

                      GroupBox1.Font.Charset := DEFAULT_CHARSET;

                      GroupBox2.Font.Charset := DEFAULT_CHARSET;
                      Label3.Font.Charset := DEFAULT_CHARSET;
                      Label4.Font.Charset := DEFAULT_CHARSET; //?

                      UseLanguage('EN');
                      RetranslateComponent(Self);
                      English1.Enabled:=False;
                      German1.Enabled:=True;
                      Russian1.Enabled:=True;

                      if ComboBox1.ItemIndex=-1 then ComboBox1.ItemIndex:=1;
                      Language:='English';
                      end else if (GetCurrentLanguage()='de_DE') then
                               begin
                               //Form1
                               AutoUpgrader1.InfoFileURL:='http://xxx/update/autoupgrade_de.cgi';
                               Font.Charset := DEFAULT_CHARSET;
                               Label2.Font.Charset := DEFAULT_CHARSET;
                               Label10.Font.Charset := DEFAULT_CHARSET;
                               GroupBox1.Font.Charset := DEFAULT_CHARSET;
                               Label9.Font.Charset := DEFAULT_CHARSET;
                               ComboBox1.Font.Charset := DEFAULT_CHARSET;

                               GroupBox1.Font.Charset := DEFAULT_CHARSET;

                               GroupBox2.Font.Charset := DEFAULT_CHARSET;
                               Label3.Font.Charset := DEFAULT_CHARSET;
                               Label4.Font.Charset := DEFAULT_CHARSET; //?

                               UseLanguage('de_DE');
                               ReTranslateComponent(Self);
                               English1.Enabled:=True;
                               German1.Enabled:=False;
                               Russian1.Enabled:=True;

                               if ComboBox1.ItemIndex=-1 then ComboBox1.ItemIndex:=1;
                               Language:='German';
                               end else if (GetCurrentLanguage()='ru_RU') then
                                        begin
                                        //Form1
                                        AutoUpgrader1.InfoFileURL:='http://xxx/update/autoupgrade_ru.cgi';
                                        Font.Charset := RUSSIAN_CHARSET;
                                        Label2.Font.Charset := RUSSIAN_CHARSET;
                                        Label10.Font.Charset := RUSSIAN_CHARSET;
                                        GroupBox1.Font.Charset := RUSSIAN_CHARSET;
                                        Label9.Font.Charset := RUSSIAN_CHARSET;
                                        ComboBox1.Font.Charset := RUSSIAN_CHARSET;

                                        GroupBox1.Font.Charset := RUSSIAN_CHARSET;

                                        GroupBox2.Font.Charset := RUSSIAN_CHARSET;
                                        Label3.Font.Charset := RUSSIAN_CHARSET;
                                        Label4.Font.Charset := RUSSIAN_CHARSET; //?

                                        UseLanguage('ru_RU');
                                        ReTranslateComponent(Self);
                                        English1.Enabled:=True;
                                        German1.Enabled:=True;
                                        Russian1.Enabled:=False;

                                        if ComboBox1.ItemIndex=-1 then ComboBox1.ItemIndex:=1;
                                        Language:='Russian';
                                        end;
                      end;

if (Background='Blue') or (Background='') then
begin
Image3.Picture:=Image23.Picture;
Blue1.Checked:=True;
Vista1.Checked:=False;
Red1.Checked:=False;
Black1.Checked:=False;
Win71.Checked:=False;
Light1.Checked:=False;
Blue1.Enabled:=False;
Vista1.Enabled:=True;
Red1.Enabled:=True;
Black1.Enabled:=True;
Win71.Enabled:=True;
Light1.Enabled:=True;
Background:='Blue';
end;
if Background='Vista' then
begin
Image3.Picture:=Image22.Picture;
Blue1.Checked:=False;
Vista1.Checked:=True;
Red1.Checked:=False;
Black1.Checked:=False;
Win71.Checked:=False;
Light1.Checked:=False;
Blue1.Enabled:=True;
Vista1.Enabled:=False;
Red1.Enabled:=True;
Black1.Enabled:=True;
Win71.Enabled:=True;
Light1.Enabled:=True;
end;
if Background='Red' then
begin
Image3.Picture:=Image24.Picture;
Blue1.Checked:=False;
Vista1.Checked:=False;
Red1.Checked:=True;
Black1.Checked:=False;
Win71.Checked:=False;
Light1.Checked:=False;
Blue1.Enabled:=True;
Vista1.Enabled:=True;
Red1.Enabled:=False;
Black1.Enabled:=True;
Win71.Enabled:=True;
Light1.Enabled:=True;
end;
if Background='Black' then
begin
Image3.Picture:=Image25.Picture;
Blue1.Checked:=False;
Vista1.Checked:=False;
Red1.Checked:=False;
Black1.Checked:=True;
Win71.Checked:=False;
Light1.Checked:=False;
Blue1.Enabled:=True;
Vista1.Enabled:=True;
Red1.Enabled:=True;
Black1.Enabled:=False;
Win71.Enabled:=True;
Light1.Enabled:=True;
end;
if Background='Win7' then
begin
Image3.Picture:=Image26.Picture;
Blue1.Checked:=False;
Vista1.Checked:=False;
Red1.Checked:=False;
Black1.Checked:=False;
Win71.Checked:=True;
Light1.Checked:=False;
Blue1.Enabled:=True;
Vista1.Enabled:=True;
Red1.Enabled:=True;
Black1.Enabled:=True;
Win71.Enabled:=False;
Light1.Enabled:=True;
end;
if Background='Light' then
begin
Image3.Picture:=Image27.Picture;
Blue1.Checked:=False;
Vista1.Checked:=False;
Red1.Checked:=False;
Black1.Checked:=False;
Win71.Checked:=False;
Light1.Checked:=True;
Blue1.Enabled:=True;
Vista1.Enabled:=True;
Red1.Enabled:=True;
Black1.Enabled:=True;
Win71.Enabled:=True;
Light1.Enabled:=False;
end;

if Headline<>'' then
Label2.Caption:=Headline;

end;

Jens Hartmann 2. Jan 2010 17:00

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Danke Matze,

ich weiß, da gibt es zum jetzigen Zeitpunkt in meinem Programm noch so einige Blöcke etc. die ich schützen muss und will. Aber Du hast aufjedenfall recht. Den Block im OnCreate, habe ich aber soeben geändert. Danke.

Gruß Jens

Matze 2. Jan 2010 17:03

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Zitat:

Zitat von AlexII
Und bei mir sieht das so aus, wenn jemand lust hat guck mal durch, vielleicht gibt's da was zu verbessern. :thumb:

Liest du, was wir hier schreiben? Nimm OnCreate und nicht OnShow. Sonst ist klar, dass bei jedem Maximieren die Anwendung erst einmal hängt, bei diesem gigantischen Code, der dann jedesmal abgearbeitet wird (ich habe ihn mir nicht angesehen).

Edit: Prüfe nie auf "= true" oder "= false".

So muss das sein:
Delphi-Quellcode:
if CheckBoxX.Checked then
oder

Delphi-Quellcode:
if not CheckBoxX.Checked then

AlexII 2. Jan 2010 17:08

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Zitat:

Edit: Prüfe nie auf "= true" oder "= false".
Wow, danke, cooler Tipp :thumb:

Matze 2. Jan 2010 17:10

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Und das hier:

Delphi-Quellcode:
case ComboBox1.Itemindex of
  3: Image9.Visible := False;
  7: Image9.Visible := False;
  21: Image9.Visible := False;
  22: Image9.Visible := False;
  24: Image9.Visible := False;
  25: Image9.Visible := False;
end;
lässt sich bsp. auch vereinfachen:

Delphi-Quellcode:
case ComboBox1.Itemindex of
  3, 7, 21, 22, 24, 25: Image9.Visible := False;
end;
Falls du wissen möchtest, wieso das mit dem Boolean-Vergleich so ist, kannst du dir das mal ansehen: Über den Umgang mit Boolean.

Edit: Achja, benenne deine Komponenten doch mal vernünftig. Du verstehst deinen Code so nämlich nur in Verbindung mit dem Formular.

Das liest sich beispielsweise sehr schlecht:

Delphi-Quellcode:
if ShowDate1.Checked=True then
begin
Label10.Visible:=True;
Label10.Caption:=FormatDateTime('dddd, d. mmmm yyyy', date);
end else Label10.Visible:=False;
Man kann erahnen, was du machst, aber viel lesbarer ist sowas, da du alleine anhand des Codes sagen kannst, was genau in der GUI passiert:

Delphi-Quellcode:
if ChkBoxShowDate.Checked then
begin
  LblDate.Visible := true;
  LblDate.Caption := FormatDateTime('dddd, d. mmmm yyyy', date);
end else
  LblDate.Visible := false;
Grüße, Matze

Jens Hartmann 2. Jan 2010 17:26

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Hallo Alex,

also was mir so aufgefallen ist, sind deine Bezeichner. Es kann sein, das es so OK ist, wenn du diese z.B. für Find oder so nutzen tust, aber wenn nicht wäre es schon ratsam, deinen Komponenten eindeutige Bezeichner zu geben...

Delphi-Quellcode:
Image11.Visible := False;
Image10.Visible := True;

Label10.Caption:='Label10';
Label10.Left:=348; //344 
Label10.Caption:=FormatDateTime('dddd, d. mmmm yyyy', date);

//So z.B.

ImageFirma.Visible := False;
ImageKunde.Visible := True;

//oder, bevor man mich schlägt weil Deutsche Namen

Image.Company := false;
Image.Company := true;
ich denke Du weißt was ich meine.

[EDIT] Zu langsam, aber kein roter Kasten, seltsam

Gruß Jens

AlexII 2. Jan 2010 17:30

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Ich hab in der Schule so gelernt, wir habe nie die Bezeichnung geändert. Bin also so gewöhnt, die Umstellung ist sogar etwas umständlich. Aber mal schauen, vllt kriege ich es hin. :mrgreen:

Jens Hartmann 2. Jan 2010 17:33

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Zitat:

Zitat von Alex
Ich hab in der Schule so gelernt, wir habe nie die Bezeichnung geändert. Bin also so gewöhnt, die Umstellung ist sogar etwas umständlich. Aber mal schauen, vllt kriege ich es hin.

Es wird Dir und allen anderen aufjedenfall das leben leichter machen. Du willst ja vieleicht auch in 2 Jahren nochmal was an deinem Programm machen. :thumb:

Gruß Jens

Matze 2. Jan 2010 17:47

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Zitat:

Zitat von Jens Hartmann
Delphi-Quellcode:
//oder, bevor man mich schlägt weil Deutsche Namen

Image.Company := false;
Image.Company := true;

Na ob das kompiliert? :stupid:

AlexII 2. Jan 2010 22:46

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Also ich hab jetzt den ganzen Code in OnCreate verlagert, aber mehr als die Hälfe funktioniert nicht. :wall: Da werden den Formularen 3 und 5 Werte zugewiesen, aber diese sind doch noch nicht createt. :wall:

Hab keine Ahnung wie man das anders als in OnShow machen kann. :wall:

Jens Hartmann 2. Jan 2010 23:14

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Zitat:

Zitat von Matze
Na ob das kompiliert?

:oops:

Ne, ich denke eher nicht, muss natürlich so aussehen. :idea:

Delphi-Quellcode:
CompanyImage.Visible := False;
CustomerImage.Visible := True;
Jens :hi:

Jens Hartmann 2. Jan 2010 23:16

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Zitat:

Zitat von Alex
Da werden den Formularen 3 und 5 Werte zugewiesen

Dann leg die Zuweisung doch in das FormCreate von Form3 und von Form5. Es ist logisch. In deiner Projektdatei, werden diese erst später erstellt.

AlexII 2. Jan 2010 23:18

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Soll ich also in jedem FORMULAR die .ini auslesen? :gruebel:

Jens Hartmann 3. Jan 2010 00:01

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Wäre z.B. eine Möglichkeit. Eine andere Möglichkeit hat mir Luckie hier gezeigt...

Werte in einer anderen Form verwenden


Außerdem, könntest Du folgendes ändern...

Delphi-Quellcode:
Form5.CheckBox2.Checked := Ini.ReadBool('Default', 'Traybarwhenmin', False);

...

if Form5.CheckBox2.Checked=True then
begin
CoolTrayIcon1.Enabled:=True;
CoolTrayIcon1.MinimizeToTray:=True;
end;
Vieleicht eher so..
Delphi-Quellcode:
var
  SetCoolTrayIcon : Boolean
begin
...
  SetCoolTrayIcon := Ini.ReadBool('Default', 'Traybarwhenmin', False);
...
  CoolTrayIcon1.Enabled := SetCoolTrayIcon = 1;
  CoolTrayIcon1.MinimizeToTray := SetCoolTrayIcon = 1;
Erstens wird dein Code Übersichtlicher und erfüllt aufjedenfall den Zweck.

Gruß Jens

AlexII 3. Jan 2010 10:23

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Jah.. und was ich schöner und vor allem schneller? Also mir geht es um die Geschwindigkeit! :?

Jens Hartmann 3. Jan 2010 11:15

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Hallo Alex,

Delphi-Quellcode:
Delphi-Quellcode: markieren
var
  SetCoolTrayIcon : Boolean
begin
...
  SetCoolTrayIcon := Ini.ReadBool('Default', 'Traybarwhenmin', False);
...
  CoolTrayIcon1.Enabled := SetCoolTrayIcon = 1;
  CoolTrayIcon1.MinimizeToTray := SetCoolTrayIcon = 1;
mach es so, und schau Dir das mit den Probertys mal genauer an. Die kannst Du für die Übergabe in eine andere Form verwenden.

Gruß Jens

AlexII 3. Jan 2010 12:48

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Ich bekomme hier folgende Fehlermeldung, obwohl ich alles richtig nachgemacht habe:

Delphi-Quellcode:
  CoolTrayIcon1.Enabled := SetCoolTrayIcon = 1;
  CoolTrayIcon1.MinimizeToTray := SetCoolTrayIcon = 1;
Zitat:

[Fehler] Unit1.pas(517): Inkompatible Typen

Matze 3. Jan 2010 12:54

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Zitat:

Zitat von AlexII
Ich bekomme hier folgende Fehlermeldung, obwohl ich alles richtig nachgemacht habe

Kleiner Widerspruch, oder? ;)

Wenn "SetCoolTrayIcon" ein Boolean ist, dann vergleiche nicht auf 1. Der Vergleich ist imho komplett überflüssig, da "SetCoolTrayIcon" bereits ein Boolean ist.

Edit: Also so:

Delphi-Quellcode:
CoolTrayIcon1.Enabled := SetCoolTrayIcon;
CoolTrayIcon1.MinimizeToTray := SetCoolTrayIcon;
Grüße, Matze

AlexII 3. Jan 2010 13:24

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Danke :)

Hab jetzt alles nach OnCreate verlagert, aber das Programm funktioniert genau so wie vorher, also nach dem Maximieren kann man mit dem Programm 5 Sekunden lang nichts machen. Also das öffnet sich schnell, aber da lässt sich nix anklicken, keine Reaktion :( Erst nach diesen 5 Sek. läuft alles, was kann denn das sein? :(

Matze 3. Jan 2010 13:27

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Hast du noch irgendwelche Dinge im OnShow oder evtl. OnActivate stehen?

Oder kann es sein, dass deine Oberfläche mit hunderten Komponenten überladen ist? Das könnte ein Anzeigen auch verlangsamen.

AlexII 3. Jan 2010 13:32

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Ja da steht noch was, aber ganz wenig, 2 oder 3 Zeilen ...

Ich habe 6 Timer, 2 PopupMenu, OpenDialog, SaveDialog, ApplicationEvent, CoolTrayIcon, AutoUpgrader und XPManifest. :gruebel:
Das ist doch nicht viel, oder?

Matze 3. Jan 2010 13:35

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Zitat:

Zitat von AlexII
Ja da steht noch was, aber ganz wenig, 2 oder 3 Zeilen ...

Da reicht schon eine Zeile, um den Start zu verzögern:

Delphi-Quellcode:
for i := 1  to 10000000 do Application.ProcessMessages;
Das kommt immer darauf an, was deine Komponenten machen. Aktive Timer führen ständig Operationen aus. Sind diese Rechenintensiv, dann kann das ein schnelles Anzeigen verhindern. Um nur ein Beispiel zu nennen.

"ApplicationEvents" stellt dir Ereignisse wie OnRestore zur Verfügung. Wenn da etwas steht, kann auch das die Verzögerung verursachen.

AlexII 3. Jan 2010 13:44

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Also das wird mir jetzt keiner Glauben:

Wenn ich den Ordner der aktuellen Version kopiere und dann das Projekt laufen lasse, läuft es beim Maximieren so langsam, wenn ich aber das Projekt vom alten Ordner öffne läuft das glatt. Es liegt also am Kopieren des Projekt Ordners.

Programm im Ordner "MeinProjekt" -> läuft super
Programm im Ordner "Kopie von MeinProjekt" -> läuft langsam

obwohl in den Code gar nich ändere. :roteyes:

Matze 3. Jan 2010 13:45

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Zitat:

Zitat von AlexII
Also das wird mir jetzt keiner Glauben [...]

Stimmt. :mrgreen:

Das kann ich mir nicht erklären. Mit deinem Updater hängt es nicht zusammen, dass der irgendwas (Verzeichnisse, Dateien, ...) prüft?

AlexII 3. Jan 2010 13:46

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Ne!
Na dann werde ich weiter forschen :lol:

AlexII 3. Jan 2010 14:10

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Ich hab's :bouncing4: :wall: :wall: :wall: :wall:

Das war die Firewall :roteyes: Ich hab hier mich zwei Tage lang gequält, dass mir der Dampf aus den Ohren kam und sie war schuld :wall:

Sie hat das Prog in neuem Ordner als Bedrohung angesehen und viele Funktionen nicht durchgelassen. Und beim Maximieren genau so, das Problem war noch, dass ich die Oberfläche der Firewall ausgeschaltet habe, dass viele Warnungen nicht gesehen habe. :roteyes:

Matze 3. Jan 2010 14:15

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Immerhin hast du dein Programm etwas optimiert, sodass nicht bei jedem Maximieren/Wiederherstellen unnötiger Code ausgeführt wird. ;)
Und den ein oder anderen hilfreichen Tipp hast du auch bekommen.

AlexII 3. Jan 2010 14:17

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Das stimmt :thumb: Danke noch mal an alle :thumb:

Jens Hartmann 3. Jan 2010 15:16

Re: FormShow mit CoolTrayIcon dauert zu lange
 
Zitat:

Zitat von Matze
Kleiner Widerspruch, oder?

Jo, hatte die Funktion aus einem Integer Vergleich kopiert. Aber dann ist der Fehler ja gefunden.

Gruß Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:15 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