Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ein "Sticky"-Button in der Titelleiste jedes Programms? (https://www.delphipraxis.net/63493-ein-sticky-button-der-titelleiste-jedes-programms.html)

Master_RC 19. Feb 2006 17:43


Ein "Sticky"-Button in der Titelleiste jedes Progr
 
hi leutz!

Ich bin mir sicher, dass es möglich ist, nur eben, "wie" ;)
Bzw. bin ich mir ziemlich sicher, dass es so etwa sschon gibt.

Ich hab schon etwas gegoogelt, hab aber immer etwas gefunden, das nur für die *eigene* Anwendung ist.

Was ich will:
Ich habe einige Programme, die ich gerne immer im Vordergrund haben würde, die das aber nicht per Option erlauben.
Jetzt wäre doch ein nettes kleines Progrämmchen schön, welches bei jeder Form, die irgendein Programm hat, in der Titelleiste einen neuen Button erstellt (menetwegen mehr als klein ;) ), der neim Klicken das Fenster "Always stay on top", bzw, wieder rückgängig macht.

Kennt jemand von euch schon so etwas oder weiß jemand, wie man das am Blödsten macht?

turboPASCAL 19. Feb 2006 18:16

Re: Ein "Sticky"-Button in der Titelleiste jedes P
 
Such doch mal bei den JVCL'lern nach JvCaptionsButton oder nach Bei Google suchenmxCaptionBarButtons

Das StayOnTop kann man ja selber machen....

Master_RC 19. Feb 2006 19:07

Re: Ein "Sticky"-Button in der Titelleiste jedes P
 
gut, di ehab ich beide, nur...

Wie mache ich das dann, dass ein Button in der Titelleiste erzeugt wird - also bei einem anderen Programm?

Ich sollte natürlich auch wissen, ob da schon einr existiert :D

Ratte 19. Feb 2006 19:14

Re: Ein "Sticky"-Button in der Titelleiste jedes P
 
Ich habe mich jetzt mit beiden Kompos nicht beschäftigt, aber kannst du vielleicht im QT (zumindest Jedi ist ja OS) ein beliebiges Handle zuweisen? Dann brauchst du nur noch regelmäßig alle Fenster zu überprüfen, die Handles bestimmen und den Button einfügen lassen (evt. kannst du auch die passenden API-Funtkionen hooken).

Master_RC 19. Feb 2006 19:21

Re: Ein "Sticky"-Button in der Titelleiste jedes P
 
soeit, sogut - so hab ich mir das eigentlich auch überlegt.

Stellen sich nur mehr 3 Fragen:

1. Gibts ne bessere Möglichkeit?

wenn nein, dann:

2. Wie überprüfe ich, ob ein solcher Button bereits bei einem programm exististert? :D

3. wie oft sollte ich aktualiserien? (im sinne der CPU-Auslastung :) )

DGL-luke 20. Feb 2006 09:36

Re: Ein "Sticky"-Button in der Titelleiste jedes P
 
Aktualisieren? Du kannst doch sicherlich irgendeine API-Funktion hooken... (CreateWindow etc.)

hitzi 20. Feb 2006 09:58

Re: Ein "Sticky"-Button in der Titelleiste jedes P
 
Hardcopy macht auch sowas ... allerdings immer nur beim aktiven Fenster und an das Handle solltest du kommen.

perle 20. Feb 2006 10:38

Re: Ein "Sticky"-Button in der Titelleiste jedes P
 
Du kannst auch einfach einen solchen Eintrag im Systemmenü hinzufügen, so brauchst du keinen extra Button.

Luckie hatte dazu mal folgenden Code gepostet

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure WndProc(var msg: TMessage); override;
  end;

var
  Form1        : TForm1;

implementation

{$R *.dfm}

const
  MY_MENU_ID = 999;

procedure TForm1.Button1Click(Sender: TObject);
var
  hMenu       : THandle;
begin
  hMenu := GetSystemMenu(Handle, False);
  if hMenu <> 0 then
  begin
    if not DeleteMenu(hMenu, 6, MF_BYPOSITION) then
      ShowMessage(SysErrorMessage(GetLastError));
    DrawMenuBar(hMenu);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  hMenu       : THandle;
begin
  hMenu := GetSystemMenu(Handle, False);
  if hMenu <> 0 then
  begin
    if not InsertMenu(hMenu, 6, MF_BYPOSITION, MY_MENU_ID, 'Mein Menüitem') then
      ShowMessage(SysErrorMessage(GetLastError));
    DrawMenuBar(hMenu);
  end;
end;

procedure TForm1.WndProc(var msg: TMessage);
begin
  inherited;
  case msg.Msg of
    WM_SYSCOMMAND:
      begin
        if hiword(msg.WParam) = 0 then
        begin
          case loword(msg.WParam) of
            MY_MENU_ID: ShowMessage('Buuuh!');
          end;
        end;
      end;
  end;
end;

Master_RC 24. Feb 2006 16:20

Re: Ein "Sticky"-Button in der Titelleiste jedes P
 
Das ist gut!
So ist kein unpassender Button bei anderen Captionbars als die Standards :)

Ich werds mal probieren, weiß aber net, ob ichs schaff :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 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