Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Projektpfad in der IDE-Titelzeile anzeigen? (https://www.delphipraxis.net/196886-projektpfad-der-ide-titelzeile-anzeigen.html)

PeterPanino 27. Jun 2018 16:32

Projektpfad in der IDE-Titelzeile anzeigen?
 
Hallo und schönen Tag!

Ist es möglich, den Pfad des aktuell geladenen bzw. ausgewählten Projektes etwa in der Titelzeile des IDE-Fensters anzuzeigen?

PeterPanino 27. Jun 2018 17:14

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Es gibt hier einen Patch von Embarcadero, der das verspricht:

http://cc.embarcadero.com/item/26161

Ich habe es versucht, in Delphi Berlin 10.1 zu installieren. Während das Compilieren und Erzeugen fehlerfrei ging, kam beim Installieren dieser Fehler zum Vorschein:

---------------------------
Error
---------------------------
Registration procedure, Showpath.Register in package C:\Users\Public\Documents\Embarcadero\Studio\18.0\ Bpl\ShowProjectPath.bpl raised exception class EAccessViolation: Access violation at address 650928E2 in module 'ShowProjectPath.bpl'. Read of address 00000000.
---------------------------
OK
---------------------------

Habe dann versucht, ShowProjectPath.bpl manuell zu installieren, dabei kam wieder der Fehler:

---------------------------
ShowProjectPath - Delphi 10.1 Berlin - ShowProjectPath.dproj [Built]
---------------------------
Registration procedure, Showpath.Register in package C:\Users\Public\Documents\Embarcadero\Studio\18.0\ Bpl\ShowProjectPath.bpl raised exception class EAccessViolation: Access violation at address 46A028E2 in module 'ShowProjectPath.bpl'. Read of address 00000000.
---------------------------
OK
---------------------------

Das ist die Registration procedure:

Code:
procedure Register;
begin
  OriginalTitle := Application.Title;
  Index := (BorlandIDEServices as IOTAServices).AddNotifier( TShowPath.Create );
  Application.Title := ExtractFilePath( ToolServices.GetProjectName );
end;
Syntaxmäßig ist hier kein Fehler, deswegen wurde es auch anstandslos kompiliert.

Wo ist hier der Fehler?

KodeZwerg 27. Jun 2018 20:20

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Steht "C:\Users\Public\Documents\Embarcadero\Studio\18.0 \ Bpl\" im BPL/DCP/Library Path ?
Und wird das bpl Verzeichniss wirklich mit einer leerstelle am Anfang betitelt?
Daran könnte es liegen, nur eine Vermutung!

KodeZwerg 27. Jun 2018 20:57

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Ich habe es mir mal heruntergeladen.
Der Fehler entsteht hier: (Datei ShowPath.pas)
Delphi-Quellcode:
  Application.Title := ExtractFilePath( ToolServices.GetProjectName );
Das
Delphi-Quellcode:
ToolServices.GetProjectName
löst den Fehler aus, wie es korrekt lauten muss weiß ich selbst noch nicht.

Falls sich damit jemand auskennt, hier die ganze procedure
Delphi-Quellcode:
procedure Register;
begin
  OriginalTitle := Application.Title;
  Index := (BorlandIDEServices as IOTAServices).AddNotifier( TShowPath.Create );
  Application.Title := ExtractFilePath( ToolServices.GetProjectName );
end;
Ps: Anzumerken wäre noch folgendes was auf der Download-Seite steht....
Zitat:

For Delphi, Version 6.0 to 6.0

PeterPanino 27. Jun 2018 23:17

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt in ShowPath.pas mal testweise alle GetProjectName durch GetCurrentFile ersetzt.

Es kam aber die gleiche Fehlermeldung:

Anhang 49405

PeterPanino 27. Jun 2018 23:39

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt einfach mal die Zeile Application.Title := ExtractFilePath... in der procedure Register auskommentiert.

Jetzt funktionierte das install.

Dann versuchte ich, die IDE neu zu starten, was wegen einer hartnäckigen Fehlermeldung nicht ging. So beendete ich die IDE im Taskmanager.

Dann beim Neustarten der IDE kam diese Fehlermeldung:

Anhang 49406

So musste ich die IDE wieder im Taskmanager schließen, weil die Fehlermeldung nicht wegging.

Dann entfernte ich die ShowProjectPath.bpl aus dem BPL-Verzeichnis.

Erst dann konnte ich die IDE erfolgreich neu starten.

PeterPanino 27. Jun 2018 23:44

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Heißt das jetzt, dass man alles, wo Delphi 6 draufsteht, wegschmeißen kann?

Immerhin steht es ja auf der Embarcadero-Seite. Aber offensichtlich hat das bei Embarcadero niemand mit einer aktuellen Delphi-Version getestet.

PeterPanino 27. Jun 2018 23:54

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
In der Datei ToolIntf.pas steht:

Zitat:

The Tool services object is created on the application side, and is
passed to the VCS/Expert Manager DLL during initialization. Note that
the application is responsible for creating and freeing the interface
object, and the client should never free the interface.
Allerdings ist diese Datei als "deprecated" deklariert:

Code:
unit ToolIntf deprecated;

KodeZwerg 28. Jun 2018 00:10

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
*Beitrag veraltet + entfernt, siehe nächsten Beitrag*

KodeZwerg 28. Jun 2018 00:41

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ist jetzt eine Version die halbwegs funktioniert und alle veralteten Units sind rausgeflogen.
Bei meinem Delphi 2009 entsteht allerdings ein Problem, die Caption wird ab und zu automatisch neu gezeichnet, somit fliegt der Dateipfad+Name wieder aus der Caption aber ansonsten macht es das was Du wolltest.

Viel Spass damit!

Wichtig: Benutze nur die Dateien aus diesem Archiv, am besten in ein Leerverzeichnis!

Ps: Man könnte theoretisch die Filename variable oder die modifizierte Caption nochmal global speichern und bei den leeren Events mit aufrufen lassen um den zuletzt offenen Datei-Namen länger in der Caption zu behalten, falls Du verstehst was ich meine.
Oder eine Hook integrieren die WM_SETTEXT für Application.MainForm.Caption abfängt und überschreibt? Das wäre glaube ich besser.:gruebel::gruebel::gruebel:

Uwe Raabe 28. Jun 2018 07:13

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von PeterPanino (Beitrag 1405986)
Immerhin steht es ja auf der Embarcadero-Seite. Aber offensichtlich hat das bei Embarcadero niemand mit einer aktuellen Delphi-Version getestet.

Die Datei stammt aus CodeCentral, das zwar von Embarcadero gehostet wird, aber auf das jeder mit einem EDN Account etwas hochladen kann. Das kommt insbesondere nicht von Embarcadero selbst, sondern von einem gewissen Wayne Schou. Es ist ausdrücklich nur für Delphi 6 angebeben und in einem Kommentar steht, daß es unter D2007 schon nicht mehr funktioniert.

Zitat:

Zitat von PeterPanino (Beitrag 1405986)
Heißt das jetzt, dass man alles, wo Delphi 6 draufsteht, wegschmeißen kann?

Die ToolsAPI hat sich seit Delphi 6 schon gehörig geändert, so wie auch die IDE selbst. Es ist eher unwahrscheinlich, daß Plugins für Delphi 6 ohne Anpassungen unter 10.2.3 laufen. Es gibt bei solchen Shifts immer eine Übergangszeit, in der sowohl das Alte als auch das Neue funktioniert, aber irgendwann ist damit halt Schluss.

Delphi 6 war etwa 2001, der Upload von 2008 - da gab es schon D2009. Offenbar hatte der Author schon damals kein Interesse an dem Support aktueller Versionen.

Uwe Raabe 28. Jun 2018 07:19

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1405989)
Hier ist jetzt eine Version die halbwegs funktioniert

Unter Delphi 10.2.3 kann ich außer einem Flackern in der Titelzeile keine Auswirkungen beim Wechsel eines Projekts feststellen.

KodeZwerg 28. Jun 2018 07:42

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Alsowenn man das Package installiert hat passieren zwei Sachen in der Delphi 2009 IDE, zum einen ist die Caption die der zuletzt geööffneten Datei und in der Messages Area wird es auch nochmal reingeschrieben.
Hier die Messages wenn ich das Projekt ShowPath öffne: Anhang 49411

Ich brauch für OpenTools Api noch mehr Erfahrung um einen Hook zu realisieren, ich weiß nicht wie ich das anstellen soll.

Falls bei Euch die Messages nicht erscheinen, bitte unter Initialization das hier einfügen:
Delphi-Quellcode:
 With (BorlandIDEServices As IOTAMessageServices) Do ShowMessageView(nil);

Uwe Raabe 28. Jun 2018 08:19

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1406003)
Alsowenn man das Package installiert hat passieren zwei Sachen in der Delphi 2009 IDE, zum einen ist die Caption die der zuletzt geööffneten Datei und in der Messages Area wird es auch nochmal reingeschrieben.

Die Messages kommen schon, allerdings beinhaltet die Titelzeile immer noch die Kombination aus Projektname - Delphi Version - Aktuelle Datei. Es mag sein, daß zwischenzeitlich etwas anderes dort angezeigt wird, aber das ist offenbar nicht von Dauer.

Unabhängig davon wird aber auch ohne so ein Plugin der vollständige Pfad des Projekts in der Fußzeile der Projektverwaltung angezeigt, wenn das Projekt in der Struktur selektiert ist. Das gilt natürlich auch für die anderen Dateien des Projekts.

Alternativ würde ich auch eher eine separate Toolbar empfehlen, in der diese Information dann angezeigt wird. Das ist zukunftssicherer, als irgendein Hack in die IDE, der bei der nächsten Version dann womöglich nicht mehr funktioniert oder sogar was kaputt macht.

KodeZwerg 28. Jun 2018 09:09

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Es ist jeder Eingeladen daran mitzuwirken, mir fehlt mit OTA leider die Erfahrung um all das was Du schreibst umzusetzen, ich habe alles mir Mögliche getan um es umzusetzen, dem Wunsch des TEs entsprechend die Caption und für mich zum debug die Messages.

Wenn jemand einen Hook realisieren kann, ich wäre auch daran Interessiert! (oder eine andere Variante, Hauptsache die Caption bleibt)

Danke fürs Lesen und tut mir leid für nicht 100% funktionstüchtig. Da wird Tokyo wohl die Caption schneller refreshen als es D2009 macht.

KodeZwerg 28. Jun 2018 10:01

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hier ein mini Update, es werden alle von D2009 unterstützten Ereignisse in der Messages-Area protokolliert mit jeweils einem "@ Ereignis" und eine "NewTitle" Variable ist hinzugekommen, falls es wer mit nem Hook hinbekommt, da ist der Inhalt der in die Caption gehört enthalten.

Viel Erfolg dabei!

Ps: So sehen nun die Messages aus wenn man ShowPath eingebunden hat: Anhang 49413

KodeZwerg 28. Jun 2018 17:12

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Ich habe mal einen SetTimer() eingebaut, darauf reagiert die IDE allergisch und forciert sofort ein Caption-Refresh, also diese Möglichkeit scheidet damit aus.
Delphi-Quellcode:
procedure TimerProc(Wnd: HWnd; Msg, TimerID, dwTime: DWORD); stdcall;
begin
   if NewTitle <> '' then Application.MainForm.Caption := NewTitle;
end;
....
initialization
 NewTitle := 'Test 123';
 hTimer := SetTimer(0,0,250,@TimerProc);
finalization
  KillTimer(0, hTimer);

Uwe Raabe 28. Jun 2018 18:51

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1406061)
Ich habe mal einen SetTimer() eingebaut, darauf reagiert die IDE allergisch und forciert sofort ein Caption-Refresh, also diese Möglichkeit scheidet damit aus.

Wie schon gesagt: Die Titelzeile scheidet als Ziel dieser Anzeige zumindest für mich aus, da dort noch genügend andere Informationen untergebracht sind (zumindest wohl seit Delphi 6), die das Plugin auch noch nachbilden müsste.

Falls es hilft: Fährt man mit der Maus über einen Editor-Tab wird auch der komplette Pfad angezeigt.

KodeZwerg 28. Jun 2018 19:21

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Ich mache es ja nur aus Akademischer Sicht weil mich das Thema OTA interessiert (Neuland) und um dem TE zu helfen.

Ich habe ja eine Lösung vor Augen aber ich weiß nicht wie ich das umsetze im OTA-konformen Stil.
Eine simple Msg Hook einrichten die auf WM_SETTEXT für die Caption reagiert.
Aber wie bekomme ich eine WndProc da reingecodet ohne eine Msg-Schleife zu haben, da bin ich völlig ratlos.
Vielleicht gehe ich da ja auch völlig falsch ran und es existiert eine OTA-Lösung, in den Hilfe-Dateien die ich zu OTA habe steht leider nichts was mir in diesen Punkt weiterhilft.

Wie die Titelzeile letzendlich auszusehen hat kann ja jeder sich selbst zusammenmixen, nur den String abändern wie auch immer der dann lauten soll oder erst gar nicht installieren :thumb:

Ps: Worauf ich hier noch gar nicht reagiert habe und es auch nochmal untermauern will, alle Möglichkeiten die Uwe genannt hatte sind Vorhanden und sollten auch dementsprechend genutzt werden.
Mit dem Plugin da oben und den Messages (die man auch auf die Projekt-Datei beschränken könnte) hätte man zumindest immer einen Pfad+Namen sichtbar um Schnell zwischen O:\Project\12345\Test1.dproj und D:\Project\12345\Test1.dproj unterscheiden zu können, es sei denn Uwe haut jetzt noch den Knaller raus und verrät eine Option die das gleiche bewirkt (auch für D2009 zum Nachvollziehen) dann hätte sich das ganze für mich mehr als Erledigt auch wenn Caption Caption bleibt ^_^

Uwe Raabe 28. Jun 2018 20:14

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1406071)
Ich habe ja eine Lösung vor Augen aber ich weiß nicht wie ich das umsetze im OTA-konformen Stil.
Eine simple Msg Hook einrichten die auf WM_SETTEXT für die Caption reagiert.

OTA-Lösungen basieren in der Regel nicht auf Message-Hooks sondern auf Notifications der IDE. Mir ist aber keine bekannt, die für diesen Zweck geeignet wäre.

KodeZwerg 28. Jun 2018 21:39

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1406074)
OTA-Lösungen basieren in der Regel nicht auf Message-Hooks sondern auf Notifications der IDE. Mir ist aber keine bekannt, die für diesen Zweck geeignet wäre.

Danke dafür, das bestätigt irgendwie auch meine Recherche. Man kann ja vieles aber doch nicht alles, mir fehlt da jedenfalls das nötige knoffhoff.
Ich spiele noch ein wenig mit AllocWnd()/AllocateHWnd() herum, vielleicht passt da ne hook rein die Delphi nix böses antut. Falls ich da Erfolg haben sollte sag ich hier bescheid, hier ist sonst Endstation für mich und TE hat Pech:oops:

PeterPanino 30. Jun 2018 07:26

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1406011)
Unabhängig davon wird aber auch ohne so ein Plugin der vollständige Pfad des Projekts in der Fußzeile der Projektverwaltung angezeigt, wenn das Projekt in der Struktur selektiert ist.

Meistens ist das Panel mit der Projektverwaltung irgendwo angedockt, sodass dort nicht viel Platz zum Anzeigen eines längeren Pfades vorhanden ist. Die Titelzeile ist der ideale Platz zum Anzeigen eines Pfades.

Zitat:

Zitat von Uwe Raabe (Beitrag 1406011)
Alternativ würde ich auch eher eine separate Toolbar empfehlen, in der diese Information dann angezeigt wird. Das ist zukunftssicherer, als irgendein Hack in die IDE, der bei der nächsten Version dann womöglich nicht mehr funktioniert oder sogar was kaputt macht.

Also wenn das mit einer Toolbar geht, die nur minimalen Platz wegnimmt, dann würde es ebenso seinen Zweck erfüllen. In der Titelzeile würde es halt gar keinen Platz wegnehmen.

PeterPanino 30. Jun 2018 07:54

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1406019)
Hier ein mini Update

Danke! Wenn ich (in 10.2.3) ein Projekt lade, wird für kurze Zeit der Pfad dieses Projektes angezeigt, aber dann gleich von der Default-Caption überschrieben. Wenn man die Default-Caption in einer Variable speichern könnte, dann müsste man nur den Pfad dieser Variable HINZUFÜGEN (anstatt die Default-Caption zu ersetzen). Von irgendwo muss die IDE ja die Default-Caption holen. Wenn man also diese Default-Caption ersetzen könnte ...

PeterPanino 30. Jun 2018 08:29

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1406061)
Ich habe mal einen SetTimer() eingebaut, darauf reagiert die IDE allergisch und forciert sofort ein Caption-Refresh, also diese Möglichkeit scheidet damit aus.

Wie wäre es, wenn man eine Message an sich selbst sendet und dann im Message-Handler die Caption setzt?
TApplication.HookMainWindow?

KodeZwerg 30. Jun 2018 08:54

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hier ein mini Update für Messages, nun haben die Ihren Eigenen Reiter (Tab).
Jetzt werden keine Messages mehr durcheinander gewürfelt, und falls Messages nicht sichtbar sind schaltet die das Plugin an.
Vorschau:Anhang 49417

KodeZwerg 30. Jun 2018 09:50

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ist eine NICHT funktionierende Version mit Deinem Hook Vorschlag.
Es funktioniert NICHT oder ich mache es falsch.
Den Hook habe ich ausgeschaltet damit die IDE heile bleibt.
Delphi-Quellcode:
constructor TShowPath.Create;
begin
  inherited Create;
//  Application.HookMainWindow(MessageHook);
//  Application.OnMessage := AppMessage;
//  fHWnd := AllocateHWnd(WndMethod);
end;

destructor TShowPath.Destroy;
begin
//  Application.UnhookMainWindow(MessageHook);
//  DeallocateHWnd(fHWnd);
  inherited Destroy;
end;
die // Zeichen entfernen damit der Hook wirksam wird.
Delphi-Quellcode:
function TShowPath.MessageHook(var Msg: TMessage): Boolean;
begin
  Result := False;
  if (Msg.Msg = WM_SETTEXT) then
  begin
    (BorlandIDEServices as IOTAMessageServices).AddTitleMessage(
     'WM_SETTEXT', MyGroup);
    if ((NewTitle <> '') and (NewTitle <> Application.MainForm.Caption))
      then Application.MainForm.Caption := NewTitle;
    Msg.Result := 0;
    Result := True;
  end;
end;

procedure TShowPath.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
   Handled := False;
   if (Msg.Message = WM_SETTEXT) then
   begin
     (BorlandIDEServices as IOTAMessageServices).AddTitleMessage(
      'WM_SETTEXT', MyGroup);
     if ((NewTitle <> '') and (NewTitle <> Application.MainForm.Caption))
      then Application.MainForm.Caption := NewTitle;
     Msg.message := 0;
     Handled := True;
   end;
end;

procedure TShowPath.WndMethod(var Msg : TMessage);
var
  Handled: Boolean;
begin
  Handled := True;
  case Msg.Msg of
    WM_SETTEXT: if ((NewTitle <> '') and (NewTitle <> Application.MainForm.Caption))
      then Application.MainForm.Caption := NewTitle;
    else
      Handled := False;
  end;
  if Handled then
    Msg.Result := 0
  else
    Msg.Result := DefWindowProc(fHWnd, Msg.Msg,
      Msg.WParam, Msg.LParam);
end;
Das sind die eigentliche Hooks, funktioniert so nicht oder ich habe da gänzlich was falsch gemacht.

Ps: In dieser Version habe ich die Messages ein klein wenig verändert, nun werden Sie nicht mehr in den Vordergrund forciert.
Ich bin mit meinem Latein am Ende.

edit
Dieser Anhang ist nur für experimentier freudige!
Habe den Anhang aktualisiert mit drei Hook Varianten, alle sind ausgeklammert beim kompilieren da es nicht das gewünschte Resultat bietet.
Die Timer Methode kann man im initialization & finalization anschalten.

Mehr Hook Methoden fallen mir wirklich nicht mehr ein. Wie Uwe sagte, es klappt so nicht da dafür keine Notification existiert.

KodeZwerg 30. Jun 2018 17:11

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ist eine Version die tatsächlich die Titelzeile (leider flackernd) up-to-date hält.
Das ist praktisch das gleiche wie oben nur total radikal da bei jeder Msg die Caption ein Update erhält sofern die nicht den Inhalt der letzten Datei entspricht.
Ich empfehle es nicht zu benutzen, Source kannst Du ja nach belieben noch verbessern/verschlimmern :lol:
Man sieht mehr den Pfad+Namen als das was Delphi da reinschreiben will, also es macht schon irgendwie das was Du in Post #1 wolltest.

Aber irgendwo ist der Wurm drinnen, wenn man Delphi beenden will stürzt Delphi ab.
Also da musst Du mithelfen den Fehler zu lokalisieren, ich entdecke ihn nicht :pale:

Nachtrag:
Dank dieses Projekts ist mir was aufgefallen was ich so vorher auch noch nicht wusste.
Die HookMainWindow Methode wird ausgelöst nachdem Delphi Messages verarbeitet hat.
Die OnMessage Methode wird ausgelöst bevor Delphi Messages verarbeitet.
Die AllocateHWnd Methode funktioniert gar nicht, ob nur in diesem Kontext oder generell ist ungewiss, bei Forms klappt es meist.

Also wenn man bei OnMessage das richtige Ereignis abfängt sollte es immer das machen was Du möchtest ohne das momentane geflackere.
Damit wäre auch der Delphi beenden bug eleminiert.

KodeZwerg 30. Jun 2018 19:44

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
*entfernt, Beitrag war schädlich/gefährlich*

PeterPanino 1. Jul 2018 10:56

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Die Caption bei jedem Aufruf von TShowPath.MessageHook zu ändern ist natürlich keine Option.

Die Filterung nach WM_SETTEXT in TShowPath.MessageHook ist letztlich unwirksam, weil die IDE das nach kurzer Zeit wieder überschreibt.

Eine Möglichkeit, die man noch probieren könnte, wäre das Senden einer USER-MESSAGE entweder in TShowPath.FileNotification, oder in TShowPath.MessageHook bei WM_SETTEXT.

Aber das würde ein dauerndes Überschreiben erzeugen, zwar nicht so stark flackernd wie beim ungefilterten TShowPath.MessageHook, aber es wäre - um eine Metapher zu verwenden - wie ein ständiges Aufwischen ständig verschütteter Milch. Besser wäre es, es gar nicht erst so weit kommen zu lassen, dass überhaupt Milch verschüttet wird.

Das eigentliche "Problem" ist ja, dass die IDE selbst nur den Projektnamen in die Titelzeile schreibt anstatt den ganzen Pfad des Projektes. Ich weiß nicht, ob es möglich ist, den Code der IDE so zu patchen, dass einfach statt des Projektnamens der ganze Pfad geschrieben wird. Das wäre die sauberste Lösung. Am einfachsten wäre es natürlich, wenn man den Code der IDE zur Verfügung hätte. Embarcadero müsste ausschließlich den UI-Teil der IDE als Open Source zur Verfügung stellen, die man nach eigenem Belieben anpassen kann. Wenn Embarcadero gescheit wäre, würden sie das tun. Denn das Ziel sollte es sein, die Weiterentwicklung der IDE AUF EINE BREITERE BASIS ZU STELLEN, um die IDE aus der Steinzeit in die Moderne zu führen.

---
PS: Das Crashen beim Beenden der IDE kommt offenbar daher, dass wegen der hohen Aufruf-Häufigkeit von TShowPath.MessageHook versucht wird, Methoden von TShowPath auszuführen wenn IDE-Objekte schon nicht mehr existieren.

KodeZwerg 1. Jul 2018 11:56

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
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
Delphi-Quellcode:
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!:thumb:

blawen 1. Jul 2018 11:59

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von KodeZwerg (Beitrag 1406173)
Hier ein mini Update für Messages, nun haben die Ihren Eigenen Reiter (Tab).
Jetzt werden keine Messages mehr durcheinander gewürfelt, und falls Messages nicht sichtbar sind schaltet die das Plugin an.
Vorschau:Anhang 49417

Eventuell verstehe ich etwas falsch, aber genau diese Information zeigt bei mir D 10.2.3. standardmässig und dauernend an
Anhang 49431

jaenicke 1. Jul 2018 12:07

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von blawen (Beitrag 1406222)
Eventuell verstehe ich etwas falsch, aber genau diese Information zeigt bei mir D 10.2.3. standardmässig und dauernend an
Anhang 49431

Aber nur für die in der Projektverwaltung ausgewählte Datei, nicht für den aktuellen Tab. Ich brauchte auch noch nie mehr, aber jeder organisiert seine Quelltexte eben anders.

blawen 1. Jul 2018 13:16

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von jaenicke (Beitrag 1406223)
Zitat:

Zitat von blawen (Beitrag 1406222)
Eventuell verstehe ich etwas falsch, aber genau diese Information zeigt bei mir D 10.2.3. standardmässig und dauernend an
Anhang 49431

Aber nur für die in der Projektverwaltung ausgewählte Datei, nicht für den aktuellen Tab. Ich brauchte auch noch nie mehr, aber jeder organisiert seine Quelltexte eben anders.

Wenn ich den Tab wechsle, wird die Auswahl in der Projektverwaltung aktualisiert und der Name wird angezeigt.
Einzig wenn ich in der Projektverwaltung selber eine andere Datei auswähle und danach in den aktiven Tab zurückwechsle, wird der Dateiname nicht aktualisiert.

jaenicke 1. Jul 2018 14:06

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Das gilt aber nur für Units, die direkt im Projekt drin sind. Wir haben z.B. viele gemeinsame Units nur als .dcu eingebunden um die Kompiliergeschwindigkeit und die Stabilität der IDE zu erhöhen.

Ich benutze aber ohnehin nur die Funktionalität im Windows Explorer eine Datei anzeigen zu lassen.

Uwe Raabe 1. Jul 2018 14:13

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von jaenicke (Beitrag 1406223)
nicht für den aktuellen Tab.

Wenn es um den aktuellen Tab (oder auch einen x-beliebigen) geht, dann genügt ein Mouse-Hover um den kompletten Pfad im Hint anzuzeigen.

KodeZwerg 1. Jul 2018 14:30

AW: Projektpfad in der IDE-Titelzeile anzeigen?
 
Zitat:

Zitat von blawen (Beitrag 1406222)
Eventuell verstehe ich etwas falsch, aber genau diese Information zeigt bei mir D 10.2.3. standardmässig und dauernend an

Ich weiß ja nicht ob Du das Plugin schonmal gestartet hast, es zeigt einem nach-und-nach mehr-und-mehr informationen über ge-/entladene Dateien, so etwas zeigt mir meine IDE nirgends an oder ich habe nicht tief genug geschaut.
Dafür habe ich in der Messages-Area nun zwei Reiter, einmal für die Datei-Informationen und einmal für Hook-Informationen.

Was bei meinem Delphi 2009 noch total falsch läuft mit dem Ding ist das wenn ich die IDE starte ein extra Messages Fenster geöffnet wird obwohl die Messages eine feste Sparte alignBottom in der IDE bei mir haben. Sprich ich seh das bei Programm Start erstmal doppelt. Einmal [X] und gut ist.


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