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
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Projektpfad in der IDE-Titelzeile anzeigen?

  Alt 28. Jun 2018, 10:01
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: Screenshot - 28_06 002.jpg
Angehängte Dateien
Dateityp: 7z ShowPath.7z (2,3 KB, 4x aufgerufen)
Gruß vom KodeZwerg

Geändert von KodeZwerg (28. Jun 2018 um 10:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Projektpfad in der IDE-Titelzeile anzeigen?

  Alt 28. Jun 2018, 17:12
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);
Gruß vom KodeZwerg

Geändert von KodeZwerg (28. Jun 2018 um 17:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.785 Beiträge
 
Delphi 12 Athens
 
#3

AW: Projektpfad in der IDE-Titelzeile anzeigen?

  Alt 28. Jun 2018, 18:51
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Projektpfad in der IDE-Titelzeile anzeigen?

  Alt 28. Jun 2018, 19:21
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

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 ^_^
Gruß vom KodeZwerg

Geändert von KodeZwerg (28. Jun 2018 um 19:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.785 Beiträge
 
Delphi 12 Athens
 
#5

AW: Projektpfad in der IDE-Titelzeile anzeigen?

  Alt 28. Jun 2018, 20:14
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Projektpfad in der IDE-Titelzeile anzeigen?

  Alt 28. Jun 2018, 21:39
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
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Projektpfad in der IDE-Titelzeile anzeigen?

  Alt 30. Jun 2018, 08:29
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?

Geändert von PeterPanino (30. Jun 2018 um 08:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Projektpfad in der IDE-Titelzeile anzeigen?

  Alt 30. Jun 2018, 08:54
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:Screenshot - 30_06.jpg
Angehängte Dateien
Dateityp: 7z ShowPath.7z (2,5 KB, 2x aufgerufen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Projektpfad in der IDE-Titelzeile anzeigen?

  Alt 30. Jun 2018, 09:50
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.
Angehängte Dateien
Dateityp: 7z ShowPath_Hook.7z (2,9 KB, 2x aufgerufen)
Gruß vom KodeZwerg

Geändert von KodeZwerg (30. Jun 2018 um 16:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Projektpfad in der IDE-Titelzeile anzeigen?

  Alt 30. Jun 2018, 17:11
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
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

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.
Angehängte Dateien
Dateityp: 7z ShowPath_Hook.7z (2,9 KB, 4x aufgerufen)
Gruß vom KodeZwerg

Geändert von KodeZwerg (30. Jun 2018 um 18:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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:39 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