[Delphi] Programm minimiert starten

3

37

Gast
Hallo,

wie der Titel schon sagt, möchte ich ein Programm minimiert starten.

Meine Versuche in FormCreate:
Code:
Application.Minimized;
sw_ShowMinimized;
sw_Hide

Leider hat das nicht geklappt. Entweder das Programm startete ganz normal, aber ich konnte nicht mehr auf Minimieren klicken oder das Programm startete ohne Inhalt (es war nur das Fenster zu sehen, ohne die Buttons, Edits, etc.).

Kann mir bitte jemand helfen?
 
Edit:
Hab mich vertan, bin jetzt selbst grad am rumbasteln. Am einfachsten wäre es, du würdest unter windows bei den Eigenschaften der *.exe so ändern, dass es immer minimiert gestartet wird. Aber ich werd mal gucken, ob ichs irgendwie Delphi-intern hinkriege ;)

Hanti

Edit2:
So, einfach die Zeile hier verwenden:

Form1.WindowState := wsMinimized;

Wobei du Form1 ggf. ersetzen musst. Rückgängig machen tust du das ganze mit

Form1.WindowState := wsNormal;

Nun denn aber ^^ viel Spaß mit deinem Programm :)
 
Zuletzt bearbeitet:
Hier ist das Ergebnis. Das gleiche ist auch, wenn man das in den Eigenschaften der Verknüpfung einstellt.

Es minimiert sich zwar in den Tray, so wie es sein sollte, aber beim Wiederherstellen kommt dann nur dieses leere Fenster. Wenn man es nochmal minimiert und wiederherstellt ist es wieder normal.

Ich weiß nicht woran es liegt.
 

Anhänge

Hast denn das ausprobiert, was ich dir geschrieben hab? Naja, ich werds mir mal heut abend angucken, hab jetzt aber erstmal noch keine Zeit. Aber mit

Code:
Form1.WindowState := wsMinimized;

sollte es gehen, musst natürlich die richtige Form eintragen. Hatte damit keine Probleme, ließ sich auch wiederherstellen... was für eine Delphi-Version nutzt du?

Bis heut abend / nacht denn :)

Hanti
 
Die Datei, die ich angehängt habe, zeigt das Ergebnis (mit deinem Code). Wie schon im ersten Post beschrieben, gehen auch die anderen Codes nicht.

Guck es dir am besten selber an, ich glaube, dann kann man es besser verstehen.

Ich benutze Delphi 2007.
 
Wäre vielleicht hilfreich, wenn du mir den ganzen Code zeigen würdest. Du könntest auch versuchen, das ganze nicht mit Tray zu machen, bei "normalen" Anwendungen funktioniert nämlich meine Zeile. Könns auch per PN / ICQ / MSN o so machen, wie du willst, sag einfach bescheid.
 
Hier ist der Code von der ersten Unit, ich hab das Programm inzwischen erweitert.

Ich habe auch schon versucht den Teil des Codes auszuschalten, der es in den Tray minimiert (besser gesagt, aus der Taskleiste ausblendet), aber es wurde trotzdem ausgeblenden, was ich nicht verstehe (und gebracht hat es auch nichts).

Ich habe schon überlegt das Problem mit einer Zeitverzögerung zu lösen, aber noch nicht ausprobiert.

Code:
unit TimerUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, mmSystem, ComCtrls, AppEvnts, Menus, IniFiles;

type
  TForm1 = class(TForm)
    DownTimer: TTimer;
    ZeitEdit: TEdit;
    StartButton: TButton;
    ZeitLabel: TLabel;
    UpTimer: TTimer;
    ProgressBar: TProgressBar;
    ApplicationEvents: TApplicationEvents;
    TrayIcon: TTrayIcon;
    PopupMenu: TPopupMenu;
    OpenItem: TMenuItem;
    CloseItem: TMenuItem;
    Wert1Item: TMenuItem;
    Wert2Item: TMenuItem;
    Wert3Item: TMenuItem;
    Trennlinie: TMenuItem;
    EinstellungenItem: TMenuItem;
    procedure StartButtonClick(Sender: TObject);
    procedure DownTimerTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Abbruch(Sender: TObject);
    procedure UpTimerTimer(Sender: TObject);
    procedure ZeitLabelClick(Sender: TObject);
    procedure Minimieren(Sender: TObject);
    procedure Wiederherstellen(Sender: TObject);
    procedure CloseItemClick(Sender: TObject);
    procedure OpenItemClick(Sender: TObject);
    procedure Wert1ItemClick(Sender: TObject);
    procedure Wert2ItemClick(Sender: TObject);
    procedure Wert3ItemClick(Sender: TObject);
    procedure EinstellungenItemClick(Sender: TObject);
    procedure EinstLesen(Sender: TObject);
    procedure WerteUebertr(Sender: TObject);
    procedure EinstLad(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Min, Sek, Zeit, Schnell1, Schnell2, Schnell3: Integer;
  Ini: TIniFile;
  Ladebalken: Boolean;

implementation

uses TimerUnit2;

{$R *.dfm}


      /////////////////////////
      ///// Start & Timer /////
      /////////////////////////


procedure TForm1.FormCreate(Sender: TObject);
begin
  EinstLesen(Sender);
  WerteUebertr(Sender);
  EinstLad(Sender);
end;

procedure TForm1.StartButtonClick(Sender: TObject);
begin
  Min:=StrToInt(ZeitEdit.Text);
  ProgressBar.Max:=Min*60;
  if Min>=0 then
    if Min=0 then
      begin
        UpTimer.Enabled:=True;
        ZeitLabel.Caption:=Format('%dm %ds', [0, 0]);
        TrayIcon.Hint:=Format('%dm %ds', [0, 0]);
        Sek:=0;
        StartButton.Visible:=False;
        ZeitEdit.Visible:=False;
        ZeitLabel.Visible:=True;
      end
    else
      begin
        DownTimer.Enabled:=True;
        ZeitLabel.Caption:=Format('%dm %ds', [Min, 0]);
        TrayIcon.Hint:=Format('%dm %ds', [Min, 0]);
        Sek:=60;
        Dec(Min);
        StartButton.Visible:=False;
        ZeitEdit.Visible:=False;
        ZeitLabel.Visible:=True;
      end
  else
    ShowMessage('D=N');
end;

procedure TForm1.UpTimerTimer(Sender: TObject);
begin
  Inc(Sek);
  Form1.Text:=Format('%dm %ds', [Min, Sek]);
  ZeitLabel.Caption:=Format('%dm %ds', [Min, Sek]);
  TrayIcon.Hint:=Format('%dm %ds', [Min, Sek]);
  if (Sek=59) then
    begin
      Sek:=-1;
      Inc(Min);
    end;
end;

procedure TForm1.DownTimerTimer(Sender: TObject);
begin
  Dec(Sek);
  Form1.Text:=Format('%dm %ds', [Min, Sek]);
  ZeitLabel.Caption:=Format('%dm %ds', [Min, Sek]);
  TrayIcon.Hint:=Format('%dm %ds', [Min, Sek]);
  ProgressBar.StepIt;
  if (Sek=0) and (Min=0) then
    begin
      Abbruch(Sender);
      SndPlaySound('Bong.wav', Snd_Async);
      TrayIcon.ShowBalloonHint;
    end;
  if (Sek=0) then
    begin
      Sek:=60;
      Dec(Min);
    end;
end;


      /////////////////////////
      ///////// Abort /////////
      /////////////////////////


procedure TForm1.Abbruch(Sender: TObject);
begin
  DownTimer.Enabled:=False;
  UpTimer.Enabled:=False;
  ZeitEdit.Text:='';
  ZeitLabel.Caption:='';
  Form1.Text:='Timer';
  ZeitEdit.Visible:=True;
  StartButton.Visible:=True;
  ZeitLabel.Visible:=False;
  ZeitEdit.SetFocus;
  ProgressBar.Position:=0;
end;

procedure TForm1.ZeitLabelClick(Sender: TObject);
begin
  Abbruch(Sender);
end;


      /////////////////////////
      // Minimize & Restore ///
      /////////////////////////


procedure TForm1.Minimieren(Sender: TObject);
begin
  ShowWindow(Handle, sw_hide);
end;

procedure TForm1.Wiederherstellen(Sender: TObject);
begin
  ShowWindow(Handle, sw_show);
  Application.Restore;
  Application.BringToFront;
end;


      /////////////////////////
      /////// PopupMenu ///////
      /////////////////////////


procedure TForm1.OpenItemClick(Sender: TObject);
begin
  ShowWindow(Handle, sw_show);
  Application.Restore;
  Application.BringToFront;
end;

procedure TForm1.CloseItemClick(Sender: TObject);
begin
  Close;
end;

procedure TForm1.Wert1ItemClick(Sender: TObject);
begin
  Abbruch(Sender);
  ZeitEdit.Text:=IntToStr(Schnell1);
  StartButtonClick(Sender);
end;

procedure TForm1.Wert2ItemClick(Sender: TObject);
begin
  Abbruch(Sender);
  ZeitEdit.Text:=IntToStr(Schnell2);
  StartButtonClick(Sender);
end;

procedure TForm1.Wert3ItemClick(Sender: TObject);
begin
  Abbruch(Sender);
  ZeitEdit.Text:=IntToStr(Schnell3);
  StartButtonClick(Sender);
end;


      /////////////////////////
      ///// Einstellungen /////
      /////////////////////////


procedure TForm1.EinstellungenItemClick(Sender: TObject);
begin
  Form2.Visible:=True;
end;

procedure TForm1.EinstLesen(Sender: TObject);
begin
  Ini:=TIniFile.Create('.\Einstellungen.ini');
  try
    Schnell1:=Ini.ReadInteger('Schnellwahl', 'Wert1', 5);
    Schnell2:=Ini.ReadInteger('Schnellwahl', 'Wert2', 10);
    Schnell3:=Ini.ReadInteger('Schnellwahl', 'Wert3', 15);
    Ladebalken:=Ini.ReadBool('Aussehen', 'Balken', True);
  finally
    Ini.Free;
  end;
end;

procedure TForm1.WerteUebertr(Sender: TObject);
begin
  Wert1Item.Caption:=Format('%d Minuten', [Schnell1]);
  Wert2Item.Caption:=Format('%d Minuten', [Schnell2]);
  Wert3Item.Caption:=Format('%d Minuten', [Schnell3]);
end;

procedure TForm1.EinstLad(Sender: TObject);
begin
  if Ladebalken=True then
    begin
      Form1.Height:=90;
      Form1.ProgressBar.Visible:=True;
    end
  else
    begin
      Form1.Height:=62;
      Form1.ProgressBar.Visible:=False;
    end;
end;


end.
 
Ich hoffe du hast es nicht zu eilig, ich werd wahrscheinlich erst Mittwoch dazu kommen, mir das ganze genau anzugucken, muss bis dahin noch für meine Mathe-LK-Abi-Klausur lernen. Vielleicht komm ich auch zwischendurch schon dazu, ich sollte mich aber eher auf Mathe konzentrieren :D
Aber keine Angst, wir finden schon was :)

bis denne

Hanti
 
Klar, ich kann warten. Lern lieber. Ich hab meine Mathe-LK Prüfung im März geschrieben. Ich kann dich verstehen ;)

Viel Erfolg!
 
Zurück
Oben