AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Infofenster im Systembereich erzeugen, einblenden und ausblenden

Infofenster im Systembereich erzeugen, einblenden und ausblenden

Ein Thema von DieDolly · begonnen am 23. Jul 2018 · letzter Beitrag vom 7. Okt 2018
Antwort Antwort
Seite 1 von 2  1 2   
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#1

Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 23. Jul 2018, 20:52
Ich arbeite gerade an einer Idee, die ich noch nicht in die Tat umsetzen kann.
Ich hätte gerne die Möglichkeit ein Informationsfenster im Systembereich einblenden zu können.
Es gibt mittlerweile aber schon 2 verschiedene Forms dafür mit unterschiedlichen Inhalten und aktuell ist es so, dass Form 2 mit der Anzeige warten muss, bis Form 1 geschlossen wurde.

Wie würdet ihr das lösen, sodass es auch eine Anfängerin wie ich versteht? Meine Idee ist, dass wenn schon ein Fenster angezeigt wird, das zweite einfach oben draufzupacken (hier als Beispiel wenn die Taskleiste unten ist).
Meine Anwendung ist zweisprachig und in einer anderen Unit setze ich die Label-Captions dieser Informationsfenster. Das kann ich aber auch gerne in die Forms selber auslagern.

Geändert von DieDolly (23. Jul 2018 um 21:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.449 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Infofenster dynamisch erzeugen und einblenden

  Alt 23. Jul 2018, 21:05
Ich verstehe nur Bahnhof. Kannst Du mal ein Bild posten, wie Du Dir das vorstellst?
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Infofenster dynamisch erzeugen und einblenden

  Alt 23. Jul 2018, 21:22
Info1 wird angezeigt, kommt Info2 hinzu, plaziere es über Nummer 1, wenn Nummer 1 geschlossen wird muss Info2 runterrutschen.

So würde ich vorgehen falls ich das richtig entziffert habe was Du da schreibst.

Ps: Das was ich meine kann man sich mit dem Tool JDownloader anschauen, kommt ein Link hinzu popt ein Fenster auf, kommt ein weiterer Link hinzu, popt nächstes Fenster über dem alten auf, ist altes weg rutscht das neue runter. Da wird es über Timer gesteuert.
Gruß vom KodeZwerg

Geändert von KodeZwerg (23. Jul 2018 um 21:28 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#4

AW: Infofenster dynamisch erzeugen und einblenden

  Alt 23. Jul 2018, 21:27
Das ist richtig aber die Frage ist, wie es technisch gemacht würde.

Ich verstehe nur Bahnhof. Kannst Du mal ein Bild posten, wie Du Dir das vorstellst?
Ich poste generell keine Bilder von dem was ich mache.

Das Bild ist nicht von mir aber das was man im Bild sieht meine ich mit Infofenster.
https://www.codeproject.com/KB/cs/Di...screenshot.JPG
Und bevor der Vorschlag kommt die windowseigenen Mittel zu nutzen: nein.

KodeZwergs Erklärung ist im Prinzip das, was ich erklären wollte.
Das aber technisch korrekt und wiederverwendbar umzusetzen ist die (sehr) große Herausforderung.

Hier ist meine Idee was einen Teil der Umsetzung angeht:
eine einzige leere aber kleine randlose Form, die dynamisch erzeugt wird, wenn man sie braucht.
Der Inhalt könnte dann aus einem Frame kommen den man bei Erzeugung der Form-Instanz zugibt.


Ich habe hier mal ein sehr simples Beispiel erstellt
Delphi-Quellcode:
type
 TTaskBarPos = (_TOP, _BOTTOM, _LEFT, _RIGHT, _NONE);



function GetTaskBarPos(Handle: THandle): TTaskBarPos;
var
 hTaskbar: HWND;
 T: TRect;
 scrW, scrH: Integer;
 CurrentScreen: TMonitor;
begin
 Result := _BOTTOM;

 hTaskbar := FindWindow('Shell_TrayWnd', nil);

 if hTaskbar <> 0 then
  begin
   CurrentScreen := Screen.MonitorFromWindow(Handle);

   GetWindowRect(hTaskbar, T);
   scrW := CurrentScreen.Width;
   scrH := CurrentScreen.Height;
   if (T.Top > scrH div 2) and (T.Right >= scrW) then
    Result := _BOTTOM
   else if (T.Top < scrH div 2) and (T.Bottom <= scrW div 2) then
    Result := _TOP
   else if (T.Left < scrW div 2) and (T.Top <= 0) then
    Result := _LEFT
   else

    if T.Left >= scrW div 2 then
    Result := _RIGHT;
  end;
end;

function GetTaskBarDimension(Handle: THandle): Integer;
var
 SysTray: Winapi.Windows.HWND;
 Rect: TRect;
begin
 Result := -1;
 SysTray := FindWindow('Shell_TrayWnd', nil);

 if SysTray <> INVALID_HANDLE_VALUE then
  begin
   if GetWindowRect(SysTray, Rect) then
    begin
     case GetTaskBarPos(Handle) of
      _LEFT, _RIGHT:
       if GetWindowRect(SysTray, Rect) then
        Result := Rect.Right - Rect.Left;

      _TOP:
       if GetWindowRect(SysTray, Rect) then
        Result := Rect.Bottom;

      _BOTTOM:
       if GetWindowRect(SysTray, Rect) then
        begin
         Result := Screen.MonitorFromWindow(Handle).Height - Rect.Top;
        end;
     end;
    end;
  end;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
 Form: TForm;
 TaskbarPos: TTaskBarPos;
 CurrentScreen: TMonitor;
 TaskBarHeight: Integer;
begin
 Form := TForm.Create(Self);
 Form.BorderStyle := bsNone;
 Form.Caption := '';
 Form.Width := 345;
 Form.Height := 145;

 CurrentScreen := Screen.MonitorFromWindow(Handle);
 TaskbarPos := GetTaskBarPos(Form.Handle);
 TaskBarHeight := GetTaskBarDimension(Form.Handle);

 case TaskbarPos of
  _TOP:
   begin
    Form.Top := TaskBarHeight;

    Form.Left := CurrentScreen.Width - Form.Width;
   end;
  _BOTTOM:
   begin
    Form.Top := CurrentScreen.Height - TaskBarHeight - Form.Height;

    Form.Left := CurrentScreen.Width - Form.Width;
   end;
  _LEFT:
   begin
    Form.Top := CurrentScreen.Height - Form.Height;

    Form.Left := TaskBarHeight;
   end;
  _RIGHT:
   begin
    Form.Top := CurrentScreen.Height - Form.Height;

    Form.Left := CurrentScreen.Width - Form.Width - TaskBarHeight;
   end;
 end;

 Form.Show;
end;

Geändert von DieDolly (24. Jul 2018 um 00:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 24. Jul 2018, 07:39
Mein Ansatz wäre mit grundsätzlich zwei Klassen:
  • Fensterklasse, die die Verhaltensweisen beim Anzeigen, Verschwinden und Rutschen implementiert
  • Fensterverwaltungsklasse mit einer Fensterliste, die über alle Fenster Bescheid weiß und Anweisungen zum Anzeigen, Verschwinden und Rutschen gibt.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#6

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 24. Jul 2018, 09:07
Könntest du dafür ein kleines Beispiel liefern? Das hört sich für mich sehr gut und schlüssig an.
  Mit Zitat antworten Zitat
Benutzerbild von MEissing
MEissing

Registriert seit: 19. Jan 2005
Ort: Egelsbach
1.384 Beiträge
 
Delphi 12 Athens
 
#7

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 24. Jul 2018, 09:18
Wenn nur und ausschliesslich Windows 10 (auf dem Zielsystem), dann würd ich die Windows 10 Notifications dafür nehmen:
http://docwiki.embarcadero.com/CodeE...cations_Sample
http://docwiki.embarcadero.com/RADSt...n_Mitteilungen
Matthias Eißing
cu://Matthias.Eißing.de [Embarcadero]
Kein Support per PN
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#8

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 24. Jul 2018, 09:23
Wie oben schon geschrieben möchte ich diese nicht verwenden. Ein Grund ist, da nicht nur Windows 10 verwendet wird (XP bis 10).

ConnorMcLeod's Ansatz gefällt mir wirklich sehr gut. Das mit dem Einblenden, Ausblenden und Rutschen würde ich rechnerisch hinbekommen. Ich habe ja Zeit genug.
Aber das Umsetzen der Klassenstrukturen und die Liste die ja vermutlich die Fenster halten und löschen können soll würde ich nicht ansatzweise realisieren können.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.449 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Infofenster dynamisch erzeugen und einblenden

  Alt 24. Jul 2018, 09:27
Ich verstehe nur Bahnhof. Kannst Du mal ein Bild posten, wie Du Dir das vorstellst?
Ich poste generell keine Bilder von dem was ich mache.
shrug
Thomas Mueller
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#10

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 24. Jul 2018, 09:27
Wenn nur und ausschliesslich Windows 10 (auf dem Zielsystem), dann würd ich die Windows 10 Notifications dafür nehmen:
http://docwiki.embarcadero.com/CodeE...cations_Sample
http://docwiki.embarcadero.com/RADSt...n_Mitteilungen
Dazu sollte man diesen Thread ( https://www.delphipraxis.net/197041-...-center-2.html ) noch lesen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:22 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