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
Thema durchsuchen
Ansicht
Themen-Optionen

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 2 von 2     12   
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 24. Jul 2018, 09:37
Vor Jahrzehnten hatte ich mir mal so etwas ähnliches gebastelt.
Ich bin dabei etwas anders vorgegangen da bei mir nur ein Fenster-Typ dargestellt werden sollte.
In der IDE habe ich mir ein mini-Fenter gebastelt, im großen und ganzen war es nur ein Label und ein Panel.
Diese leere Form habe ich als proto-Form in Resource abgelegt.
Wie ConnorMcLeod bereits schrieb braucht man dafür eine Verwaltung.
Die Position "unten rechts über Taskbar" war das einzige was ich zum berechnen brauchte.
In der Verwaltung habe ich den Bildschirm in "Max Höhe / Fensterhöhe" unterteilt um Positionen für die einzelnen Fenster zu erhalten.
Nun lediglich proto-Form in eine dynamische umwandeln, Label und Panel beschreiben, Verwaltung abfragen an welcher Position was frei ist und anzeigen lassen.
Was ich damals noch nicht drinnen hatte war das runterrutschen, wäre über die Verwaltung aber auch nicht so extrem schwer umzusetzen da die immer weiß welche Fensterpositionen belegt sind.
Problematisch wurde es bei mir in dem Sonderfall "was soll passieren wenn ein neues Fenster nicht mehr auf Screen passt"....
....da meine Art der Verwaltung nur "Max Screen Höhe / Fensterhöhe" als valide Ziele kannte.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
961 Beiträge
 
#12

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 24. Jul 2018, 09:47
Ich werfe mal JvDesktopAlert und JvDesktopAlertStack in den Raum. Das Funktioniert bei mir seit Jahren perfekt (XP bis Win10) und du hast einiges an Designmöglichkeiten.

Solltest du das aber unter allen Umständen selber machen wollen, so kannst du dir ggf. bei den Jedi's was abgucken.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#13

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 24. Jul 2018, 09:49
Die Jedis benutze ich seit Jahren schon nicht mehr, da sich da scheinbar nichts mehr tut (zumindestes bei GitHub).
Der Code ist auch viel zu kompliziert finde ich, speziell für Anfänger.

Am liebsten wäre es mir, wenn mir ConnorMcLeod und KodeZwerg mit ihren Ideen zur Umsetzung verhelfen könnten.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

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

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 24. Jul 2018, 10:24
Tut mir leid, wenn ich nicht allzuviel Zeit investieren kann (berufstätig ...), aber als Starthilfe/Diskussionsgrundlage:
Delphi-Quellcode:
type
  TFormPosition = record
    ... x, y, Breite, Höhe, Status (maximiert, normal, minimiert) etc ...
  end;

  TRutschForm = class(TCustomForm)
  private
    FCurrentPosition: TFormPosition;
  public
    procedure ZeigDich;
    procedure VersteckDich;
    procedure ZerstoerDich;
    procedure RutschVonNach(AVon: TFormPosition; ANach: TFormPosition);

    property MessageText: ...
  end;

  TRutschFormList = {delphiversionsabhängig} TList<TRutschForm>
    ... gewünschte Verhaltensweisen ...
  end;
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#15

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 7. Okt 2018, 15:35
Ich hab mich mal dran versucht aber bekomme es nicht hin.
Viel weiter komme ich mit deinem Konstrukt auch nicht. Genau gesagt komme ich nicht eine einzige Zeile weiter w eil mir das Verständnis fehlt.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 7. Okt 2018, 17:06
Du kannst mal hier rein schauen, bei Interesse sag was.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#17

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 7. Okt 2018, 17:28
Genau soetwas meine ich. Das ein- und ausblenden habe ich schon. Die entsprechenden Forms dafür ich (ich habe verschiedene).
Nur das mit der Liste kapier ich nicht, sodass wenn ein Fenster sichtbar ist, das neue oben drüber angezeigt wird und zusätzlich wenn eins sich ausblendet das obere runterrutscht.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 7. Okt 2018, 17:38
Ich erzeuge den ganzen kram per Laufzeit, (da wollte ich Wissen ob es das ist was der TE dort wollte, aber blieb unbeantwortet) eine kleine Fensterverwaltung rein, sollte nicht so arg problematisch sein, ich weiß nicht wie Du es momentan machst, aber wenn es sowas in der Art ist wie ich da per Demo zeigte, kann ich das versuchen in ne Klasse zu quetschen, threads draus zu machen, ne kleine verwaltung rein, und es sollte so was wie bei jdownloader rauskommen, bei mir halt ne transparente mini-form blau mit nem Label drauf.
Womit ich gerade probleme habe wäre wie die Fenster reagieren wenn ein OnTop über nen anderes OnTop flutscht, bei mir wirds halt in ner loop ausgeführt bis fenster das sichtbare bild verlassen hat.
Gerne würde ich das runterflutschen auch beschränken das ab Taskbar abgeschnitten wird und nicht rübergemalt wird, so wie es jetzt der Fall ist.

Zeige doch mal ne Demo von dem was Du hast
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#19

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 7. Okt 2018, 17:42
Mehr als das was auf Seite 1 steht habe ich nicht.
Mit dem was ich da stehen habe könntest du dir die Taskbarhöhe ausrechnen und dann die Form Height in einer Schleife + Delay immer um 1 verringern. Dann wärst du das Problem mit dem unter der Taskleiste los.

Wir könnten das eventuell zusammen machen. Du das mit den Klassen, da du dich damit scheinbar gut auskennst, und ich gehe das Problem mit der Taskleistenhöhe und -position an und stelle alles danach hier rein.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Infofenster im Systembereich erzeugen, einblenden und ausblenden

  Alt 7. Okt 2018, 18:28
Delphi-Quellcode:
procedure ShowTrayMessage(const TheMessage: String);
var
 H: HWND;
 Rec: TRect;
 NeededTop: Integer;
 HintForm: TForm;
 HintLabel: TLabel;
 aw: hwnd;
begin
 H := FindWindow('Shell_TrayWnd', nil);
 if h <> 0 then
 begin
  GetWindowRect(h, Rec);
  HintForm := TForm.Create(nil);
  with HintForm do
  begin
   Width := 245;
   Height := 100;
   Color := clSkyBlue;
   BorderStyle := bsNone;
   FormStyle := fsStayOnTop;
   HintLabel := TLabel.Create(nil);
   with HintLabel do
   begin
    Parent := HintForm;
    WordWrap := true;
    Font.Name := 'Fixedsys';
    Font.Style := [fsBold];
    Font.Pitch := fpFixed;
    Font.Size := 9;
    Caption := ' ' + Trim(TheMessage) + ' ';
    Align := alClient;
    Layout := tlCenter;
    Alignment := taCenter;
   end;
   AlphaBlend := true;
   AlphaBlendValue:=220;
   aw := GetActiveWindow;
   ShowWindow(handle, SW_SHOWNOACTIVATE);
   SetActiveWindow(aw);
   Left := Screen.Width - Width;
   Top := Screen.Height - 20;
   NeededTop := Rec.Top - Height;
   while Top > NeededTop do
   begin
    Top:=Top - 2;
    Repaint;
    Sleep(10);
   end;
    Sleep(3000);
   NeededTop := Screen.Width - 20;
   while Top < NeededTop do
   begin
    Top:=Top + 2;
    Repaint;
    Sleep(10);
   end;
   HintLabel.Free;
   Free;
  end;
 end;
end;
So sieht das ganze momentan aus, ja Du magst kein "with", das ist dennoch erstmal meine Ausgangsbasis um daraus ne Threaded Klasse zu erschaffen.
Es gibt viel zu tun, also fangen wir was an
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 02:27 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