Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Einige Probleme mit Delphi Programm zusammengefasst

Mitglied: Eifeladmin

Eifeladmin (Level 1) - Jetzt verbinden

09.05.2006, aktualisiert 12.05.2006, 8606 Aufrufe, 5 Kommentare

Delphi Programm Maximieren/ Fenster speichern/ CMD Fenster öffnen

Hi @ all

Ich bin mir gerade ein kleines Tool am programmieren was mir meine Arbeit als Netzwerkadministrator erleichern soll. Habe aber jetzt einige Probleme. Hab schon das Web durchsucht aber leider nichts passendes gefunden.

Ich hab das Programm so porgrammiert das es beim minimieren im Systray ablegt. Das klappt auch so weit. Zusätzlich hab ich es so gemacht das, wenn ich ein zweites Formular minimiere sich das ganze Programm im Tray ablegt. Aber wenn ich das Programm wieder aufrufe wird das zweite Formular nicht wiederhergestellt sondern bleibt minimiert. Kann mir da jemand helfen?

Zweites Problem wenn ich das Hauptformular verschiebe und dann schließe wird es wieder an der alten Stelle geöffnet. Kann man das nicht irgendwo einstellen das sich das Fenster am alten Platz öffnet ohne großen Aufwand?

Drittes Problem was ich habe, ist das ich gern ein Dos Fenster öffnen will aber nicht weiß wie es am besten mache. Hat da jemand einen Tipp für mich?

Ich bin leider nicht so der Delphiexperte.

Danke schon mal für eure Hilfe.

MFG
Nemo
Mitglied: 8644
10.05.2006 um 16:48 Uhr
Hi Nemo,

da isser wieder

zu Frage 1: Wird das Proggy beim Start sofort im Tray abgelegt?
Das mit dem zweiten Formular ist mir auch noch nicht ganz schlüssig, ich verstehe das so:
Deine Anwendung besteht aus mehreren Formularen und egal, welches du minimierst, legt sich das ganze Programm im Tray ab - ist das soweit richtig? Und wenn du das Programm wieder aktivierst, soll im Prinzip der Zustand vor dem Minimieren wieder hergestellt werden - richtg?

Zu Frage 2:
Hier gibt es verschiedene Möglichkeiten, wovon für einen Delphi-Laien wahrscheinlich die einfachste ist, sich die Position der Fenster (left, top) in globalen Variablen zu merken und beim Öffnen wieder zu setzen.

Zu Frage 3:
Nur ein DOS-Fenster zu öffnen, geht so:

ShellExecute(Application.Handle, 'open', 'cmd', nil, nil, SW_NORMAL);

Dazu mußt du die ShellApi unter Uses einbinden, falls du was anderes möchtest, schreibe bitte mal genau, was!

Psycho
Bitte warten ..
Mitglied: Eifeladmin
11.05.2006 um 17:35 Uhr
Hi

also das Programm legt sicher erst beim Minimieren in den Tray.
Entweder sollen sich beim wiederherstellen beide Formulare wiederherstellen oder nur das Hauptformular. Momentan bleibt das zweite halt minimiert. Mir ist es eigentlich egal welche Variante von beiden, was einfach ist.

Ich hätte gerne das sich das Programm unten Rechts öffnet. Kannst du mir vielleicht genauer erklären wie ich das mach? (weist ja Leihe )

Schon mal Danke für den Tipp mit dem "CMD" das werd ich gleich direkt mal einbinden.

MFG
Nemo
Bitte warten ..
Mitglied: 8644
12.05.2006 um 09:08 Uhr
Moin,

lass es uns versuchen:

Im uses - Teil benötigst du die ShellAPI

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellAPI, Menus, StdCtrls;

Als nächstes brauchen wir eine globale Konstante:

const
WM_TASKBAREVENT =WM_USER + 1;

Da wir mit mehreren Formularen hantieren, verwende ich den public - Bereich für die weiteren Deklarationen,
die Variable vis benutze ich, um festzustellen, ob das zweite Formular geöffnet ist. Die Prozeduren solltest du kennen:

public
{ Public-Deklarationen }
vis : Boolean;
procedure TaskBarEvent(var Msg: TMessage);
Message WM_Taskbarevent;
procedure WMSysCommand(var Msg: TWMSysCommand);
Message WM_SysCommand;
end;

Jetzt die Prozedur, die das/die Fenster versteckt und das Trayicon erzeugt. Hier wird auch abgefragt, ob das zweite Formular sichtbar ist:

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
var
NotifyIconData: TNotifyIconData;
begin
if Form2.Visible then vis := True else vis := False;
if vis then Form2.Hide;
if Msg.CmdType and $FFF0 = SC_MINIMIZE then
Hide
else
inherited;
Fillchar(NotifyIconData.cbSize,Sizeof(NotifyIconData),0);
NotifyIconData.cbSize := Sizeof(NotifyIconData);
NotifyIconData.Wnd := Handle;
NotifyIconData.uFlags := NIF_MESSAGE
or NIF_ICON
or NIF_TIP;
NotifyIconData.uCallbackMessage := WM_TASKBAREVENT;
NotifyIconData.hIcon := Application.Icon.Handle;
NotifyIconData.szTip := 'Blabla';
Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
end;

Nun die Behandlung des Trayicons, kennst du sicher schon. Hinzu kommt die Abfrage für das zweite Formular:

procedure TForm1.TaskBarEvent(var Msg: TMessage);
var
Point : TPoint;
begin
case Msg.LParam of
WM_LBUTTONDBLCLK:
begin
Form1.Show;
if vis then Form2.Show;
end;
WM_LBUTTONUP:
begin
end;
WM_RBUTTONUP:
begin
SetForegroundWindow(Handle);
GetCursorPos(Point);
PopupMenu1.Popup(Point.x, Point.y);
end;
end;
end;

Beim Öffnen des zweiten Formulars auf die Variable vis achten:

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
vis := True;
end;

Die Position des Fensters setzen:

procedure TForm1.FormShow(Sender: TObject);
begin
Form1.Left := Screen.Width - Form1.Width;
Form1.Top := Screen.Height - Form1.Height - 30;
end;

Etwas Kosmetik - das Icon wieder zerschiessen:

procedure TForm1.FormDestroy(Sender: TObject);
var
NotifyIconData: TNotifyIconData;
begin
FillChar(NotifyIconData,Sizeof(NotifyIconData),0);
NotifyIconData.cbSize := Sizeof(NotifyIconData);
NotifyIconData.Wnd := Self.Handle;
NotifyIconData.uFlags := NIF_MESSAGE
or NIF_ICON
or NIF_TIP;
NotifyIconData.uCallbackMessage := WM_TaskBarEvent;
NotifyIconData.hIcon := Application.Icon.Handle;
NotifyIconData.szTip := 'Blabla';
Shell_NotifyIcon(NIM_DELETE, @NotifyIconData);
end;

In der zweiten Unit kommen wir mit privaten Deklarationen aus:

private
{ Private-Deklarationen }
procedure WMSysCommand(var Msg: TWMSysCommand);
Message WM_SysCommand;
public
{ Public-Deklarationen }
end;

Hier holen wir uns die Prozedur aus Unit1:

procedure TForm2.WMSysCommand(var Msg: TWMSysCommand);
begin
if Msg.CmdType and $FFF0 = SC_MINIMIZE then begin
Form1.WMSysCommand(Msg);
Hide
end else
inherited;
end;


Die Variable nicht vergessen:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.vis := False;
end;

Ich hoffe, ich habe an alles gedacht!
Viel Spaß beim Testen

Psycho
Bitte warten ..
Mitglied: Eifeladmin
12.05.2006 um 09:21 Uhr
Hi

danke schön!

Ich werds nachher mal testen.
Funktioniert das auch mit mehreren Formularen? Ich noch welche hinzugefügt.
Muss ich die Funktionen hier mit meinen ersetzten? Ich hab mit ablegen im Tray ja schon drin.

MFG
Nemo
Bitte warten ..
Mitglied: 8644
12.05.2006 um 09:24 Uhr
Hi,

natürlich musst du sie nicht ersetzen, du musst aber immer darauf achten, dass du dir merkst, welche Formulare offen sind - sprich du benötigst die entsprechenden Variablen.
Nur so kannst du gewährleisten, dass die richtigen Fenster wieder geöffnet werden.

Psycho
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Zeilen einer CSV zusammenfassen und zusammengefasst speichern

Frage von Experiment626Batch & Shell4 Kommentare

So würde die CSV aussehen. Ich würde gerne zusammenfassen lassen, wobei die ersten drei Token zusammengehören, das vierte Token ...

Datenbanken

Wie kann ich eine Delphi-EXE-Datei öffnen?

gelöst Frage von imebroDatenbanken11 Kommentare

Hallo, wir nutzen ein Programm, welches in Delphi programmiert ist. Das Programm ist bereits 17 Jahre alt und wurde ...

Windows 7

Performance Probleme bei Programmen und Windows

Frage von Kunzi333Windows 710 Kommentare

Hallo zusammen, seit 2 Monaten haben wir im Firmennetz ein komisches Phänomen. Und zwar hängen bei manchen PCs (nicht ...

Entwicklung

Delphi-Script: Abgriff von Zeichen bis Zeichen

gelöst Frage von archivarioEntwicklung3 Kommentare

Hallo zúsammen, vielleicht kann mir jemand helfen. Ich muss in einem Delphi Programm per Script ein bestimmtes Zeichen rausfiltern ...

Neue Wissensbeiträge
Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 6 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 12 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 1 TagSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Heiß diskutierte Inhalte
Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server24 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless22 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...