Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Application.Icon setzen (https://www.delphipraxis.net/195916-application-icon-setzen.html)

freimatz 9. Apr 2018 18:55

AW: Application.Icon setzen
 
Hallo,
also erstmal - ich habe eine Lösung:
Delphi-Quellcode:
procedure DoIcon();
var
  h : hIcon;
begin
  h := LoadIcon(hInstance, 'MAINICON');
  Application.Icon.Handle := h;
  InvalidateRect(Application.Handle, nil, true);
end;

begin
  Application.Title := 'BalBlaBla';
  DoIcon();
  Application.Initialize;
  SplashFormCreate('',false);
  Application.ProcessMessages();
  ...
An sich fehlte gegenüber vorigen Versuchen nur ein "Application.ProcessMessages();"

Zitat:

Zitat von Alallart (Beitrag 1398574)
500.000 Zeilen? Respekt. Nur baut man Splash Screens nicht eher beim Start des Programms ein?

Das Einbauen und die zeitliche Abfolge ist nicht unbedingt abhängig. Etliche units haben einen initialization Abschnitt und vor allem bei Fremdkomponenten habe ich da nicht den Überblick.

Zwischen Programmstart und bis das Hauptfenster fertig ist können schon mal 10 Sekunden vergehen.
Application.MainFormOnTaskbar ist von Beginn an False; ob das später noch mal auf True geht habe ich nicht untersucht. Das Hauptfenster setzt später auch nochmal das Icon (je nach Konfiguration unterschiedliche)

Mein Splash ist nicht ausschaltbar; andererseits ist er auch nicht fsStayOnTop so dass man noch was anders tun kann.

Danke für alle Beiträge. :thumb:

günni0 9. Apr 2018 19:05

AW: Application.Icon setzen
 
Solange der Splash-Screen nur für die Dauer des Programmstarts angezeigt wird, wenn auch wirklich was geladen/initialisiert wird, ist doch alles OK. Nag-Screen kann man das nicht nennen.
Sonst wäre der Photoshop-Splash-Screen ja auch ein Nag-Screen.

KodeZwerg 9. Apr 2018 19:07

AW: Application.Icon setzen
 
So sollts auch gehen um Code kurz zu halten.
Delphi-Quellcode:
procedure DoIcon();
begin
  Application.Icon.Handle := LoadIcon(hInstance, 'MAINICON');
  InvalidateRect(Application.Handle, nil, true);
end;
Sonst müsstest Du irgendwo das "h" wieder freigeben, oder?

günni0 9. Apr 2018 19:12

AW: Application.Icon setzen
 
Programmierung Lehrjahr 1: Zwischenvariablen, wenn möglich, immer vermeiden. Besonders bei Blöcken <= 10 Zeilen.

KodeZwerg 9. Apr 2018 19:29

AW: Application.Icon setzen
 
In der Entstehung nutz ich erstmal viele Variablen um halt Feedback auswerten zu können, die kommen alle schön brav in eine {$IFNDEF DEPLOY} rein um automatisch bei {$DEFINE DEPLOY} ignoriert/übersprungen zu werden.

Als Beispiel dient mir obiger Source:
Delphi-Quellcode:
{.$DEFINE DEPLOY} // Wenn der Punkt entfernt wird, ist's aktiv

procedure DoIcon();
{$IFNDEF DEPLOY}
var
  h : hIcon;
{$ENDIF DEPLOY}
begin
{$IFNDEF DEPLOY}
  h := LoadIcon(hInstance, 'MAINICON');
  Application.Icon.Handle := h;
{$ELSE DEPLOY}
  Application.Icon.Handle := LoadIcon(hInstance, 'MAINICON');
{$ENDIF DEPLOY}
  InvalidateRect(Application.Handle, nil, true);
end;
Habs grad nur so hingekritzelt, korrektheit könnt falsch sein.

günni0 9. Apr 2018 19:42

AW: Application.Icon setzen
 
Sieht schwer noch nahezu doppeltem und unheimlich schwer wartbarem Code aus wenn es dann mal tausende Zeilen sind die man so schreibt.

freimatz 9. Apr 2018 19:45

AW: Application.Icon setzen
 
Zitat:

Zitat von günni0 (Beitrag 1398584)
Programmierung Lehrjahr 1: Zwischenvariablen, wenn möglich, immer vermeiden. Besonders bei Blöcken <= 10 Zeilen.

:shock: :roll: :mrgreen:
Programmierung Lehre -> diese Schule meiden.

Ok - schöner Code ist meiner auch nicht. Aber da mache ich erst wieder rum wenn das Produkt raus ist und das ist Donnerstag.

@KodeZwerg: was soll das bringen? Macht es doch nur extrem unleserlich. Der Compiler optimiert das doch eh weg.

günni0 9. Apr 2018 19:49

AW: Application.Icon setzen
 
Zitat:

Programmierung Lehre -> diese Schule meiden.
Wird zwar jetzt ein Streitthema, aber das sehe ich anders. Wo man Zwischenvariablen meiden KANN, sollte man das tun. Für drei Zeilen Code braucht meine keine Zwischenvariable. Auch wenns zwei, drei Zeilen mehr sind nicht. Das bläht Code unnötig auf. Außerdem wird Code nicht zwangsläufig lesbarer, nur weil man 10 Zwischenvariablen nutzt.
Wenn man einen Wert in einem Code-Block x-mal benötigt ist das was anderes.

KodeZwerg 9. Apr 2018 20:08

AW: Application.Icon setzen
 
Das war halt nur ein Beispiel, jeder so wie er es mag.
Da ich mich an so eine Art der Programmierung gewöhnt habe, also das innerhalb bestimmter {$IF} Blöcke nur bestimmte Sachen beim Compilieren berücksichtigt werden, kann ich mich halt in den {$IFNDEF} Blöcken relativ frei austoben und in den {$IFDEF} oder {$ELSE} Blöcken halt Achten alles richtig zu machen.
Da es bei mir viele eigene Funktionen/Prozeduren gibt die ich halt in zwei Varianten brauche, einmal Testing einmal Release ohne jede Funktion/Prozedur doppelt haben zu müssen, nutze ich diese Möglichkeit.
Punkt entfernen = nur Release Code wird compiliert und das betrifft bei mir halt viele Aufrufe.

himitsu 9. Apr 2018 21:23

AW: Application.Icon setzen
 
Beim Debuggen kann man sich die Zwischenergebnisse ansehen. (OK, im Assembler, teilschritte in den überwachten Ausdrücke, Variable auswerten, ...)

Zitat:

Zitat von günni0 (Beitrag 1398576)
Ich handhabe es so, dass der Splash-Screen für die Dauer angezeigt wird die es benötigt alle Formulare zu erzeugen

Warum überhaupt immer alles erstellen, anstatt es nur/erst dann, wenn es auch verwendet wird?

Vieles wird selten/fast nie verwendet, oder schaust du dir den Options- oder gar den Info-Dialog deines Delphi mehrmals täglich an?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr.
Seite 3 von 4     123 4      

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