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
 
DieDolly

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

AW: Infofenster dynamisch erzeugen und einblenden

  Alt 23. Jul 2018, 20: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 (23. Jul 2018 um 23:52 Uhr)
  Mit Zitat antworten Zitat
 


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 13:55 Uhr.
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