AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Projektpfad in der IDE-Titelzeile anzeigen?
Thema durchsuchen
Ansicht
Themen-Optionen

Projektpfad in der IDE-Titelzeile anzeigen?

Ein Thema von PeterPanino · begonnen am 27. Jun 2018 · letzter Beitrag vom 1. Jul 2018
 
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Projektpfad in der IDE-Titelzeile anzeigen?

  Alt 1. Jul 2018, 11:56
Das was Du möchtest funktioniert nicht. Ich habe gestern Nacht noch ein wenig herum-experimentiert um herauszufinden ob man mit der OnMessage Methode ein passendes Ereignis abfangen, auswerten und verarbeiten kann = Nein man kann nicht bzw ich habe dabei die Geduld verloren.
Bei Interesse, im Anhang ist die OnMessage Variante die gleichzeitig einen neuen Message-Reiter "MyHook" einrichtet.

Hier ist das Herz-Stück davon:
Delphi-Quellcode:
procedure TShowPath.AppMessage(var Msg: TMsg; var Handled: Boolean);
var
  ClassName, WindowName: String;
begin
   Handled := False;

// Hier ist ein Beispiel wie man sich auf eine Message von einer bestimmten Resource festlegt
{
  SetLength(ClassName, 64);
  SetLength(ClassName, GetClassName(Msg.hwnd, PWideChar(ClassName), 64));
  SetLength(WindowName, 64);
  SetLength(WindowName, SendMessage(Msg.hwnd, WM_GETTEXT, 64, lParam(PChar(WindowName))));
  if ((Msg.message = 275) and (ClassName = 'TPUtilWindow')) then
  begin
    if ((NewTitle <> '') and (NewTitle <> Application.MainForm.Caption))
      then Application.MainForm.Caption := NewTitle;
//    Handled := True; // <- AUF GAR KEINEN FALL TRUE ÜBERGEBEN WENN NICHT ZU 1000% SICHER!!!!
//    Exit; // Das hier aktivieren um Eintrag in die StringList zu unterdrücken
  end;
}


// if Msg.hwnd = Application.Handle then // So grenzt man das ganze auf seine Eigene Applikation ein, in diesem Falle falsch.
    if ((NewTitle <> '') and (NewTitle <> Application.MainForm.Caption))
      then
      begin
// Hier wird die Caption neu betitelt und gleich danach wieder von Delphi oder WinApi überschrieben
        Application.MainForm.Caption := NewTitle;
        try
        finally
// Wenn man sich auf einen Window/ClassName geeinigt hat kann man auch die Params mit einbeziehen was zu deutlich mehr Ergebnissen führt
// aber wenn man es Perfekt haben will, kann man nur so sich tiefer und tiefer reinbuddeln bis man am Ziel ist.
// dafür existiert ein weiterer Boolean bei der Übergabe
// Anmerkung: hier sieht man auch wie man auf die aktuelle Msg reagiert und nicht die Last-Variablen
// if ((AddSList(Msg.hwnd, Msg.message, Msg.lParam, Msg.wParam, True, True)) and (SList.Count > 0)) then
// Hier ein Beispiel mit den Last-Variablen
// if ((AddSList(LastH, LastM, LastL, LastW, True)) and (SList.Count > 0)) then
// Der minimalste Aufruf von AddSList() der auch noch Sinn erfüllt sieht so aus:
          if ((AddSList(Msg.hwnd, Msg.message)) and (SList.Count > 0)) then
           begin
            (BorlandIDEServices as IOTAMessageServices).AddTitleMessage(
             'AppMessage @ '+SList.Strings[SList.Count-1], HookGroup);
// Handled := True; // <- AUF GAR KEINEN FALL TRUE ÜBERGEBEN WENN NICHT ZU 1000% SICHER!!!!
           end;
        end;
      end;
end;
Je mehr Input Du AddSList() übermittelst um so feiner wird es aber es bezieht auch gleich immer mehr Ergebnisse mit ein.
Du wirst sehen was ich meine sobald du mal if ((AddSList(Msg.hwnd, Msg.message, Msg.lParam, Msg.wParam, True, True)) and (SList.Count > 0)) then aufrufst.
Die AddSList() sollte lieber die ganze TMsg mitgeliefert bekommen, wäre einfacher, mir war es in dem Moment egal. Kannst Du ja gerne korrigieren.

Ich mache an diesem Punkt damit nicht weiter, Nadel im Heuhaufen findet man schneller als das Ereignis was für die Caption verantwortlich ist. Ich wünsche Dir auf jeden Fall viel Glück bei dem Vorhaben! Meine Vermutung ist das es schlicht nicht möglich ist das generisch so hinzubekommen das es auf jedem Rechner mit jeder Delphi Version gleich funktioniert.

Du kannst natürlich auch alles was Du selber vorschlägst durchprobieren, ich gehe da auch von einem Scheitern aus.
Ich bin gespannt ob Du da was hinbekommst!
Angehängte Dateien
Dateityp: 7z ShowPath_Hook.7z (4,3 KB, 1x aufgerufen)
Gruß vom KodeZwerg
  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 18:02 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