Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Geisterjagt (https://www.delphipraxis.net/214172-geisterjagt.html)

Edelfix 28. Nov 2023 08:10

Geisterjagt
 
Hallo,

ich jage nach Geistern. So fühlt sich aktuell meine Aufgabe an.

Ich betreue ein altes und riesiges Projekt. Jetzt wurde eine Maske / Form umgestaltet.

Seit dem habe ich zwei Komponenten die sich merkwürdig verhalten. Die GroupBox11 und die DBEdit2.

Beide bekommen zu Runtime eine andere Caption. Die Caption enthält Text der igendwo aus dem Untifen des Projektes kommen könnte.

Aber ich komme nicht dahinter an welcher Stelle die Caption geändert wird. Die Suche in allen .pas und .dfm Dateien hat nichts ergeben.

Sobald ich die beiden Komponenten umbenene bleibt die Caption unverändert.

Jemand eine Idee wo ich noch suchen könnte?

AlexII 28. Nov 2023 08:47

AW: Geisterjagt
 
Sind da Umlaute enthalten?

himitsu 28. Nov 2023 08:47

AW: Geisterjagt
 
Unit Vcl.Controls

procedure TControl.SetText

da einen Haltepunkt rein



und vielleicht noch
Delphi-Quellcode:
Self.Name = 'ComboBox1'
oder
Delphi-Quellcode:
Self is TComboBox
als Bedingung für diesen Haldepunkt :stupid:
(das Debug-DCUs natürlich aktivieren)







oooooooder das ins Interface deiner FormUnit, vor die Deklaration der Form.
Delphi-Quellcode:
type
  TComboBox = class(Vcl.Controls.TComboBox)
    procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED; // oder alternativ WM_SETTEXT
    //procedure WMSetText(var Message: TWMSetText); message WM_SETTEXT;
  end;
Delphi-Quellcode:
procedure TComboBox.CMTextChanged(var Message: TMessage);
begin
  inherited; << hier der Haltepunkt
end;
Leider waren weder SetText, noch SetTextBuf, virtual, also nicht direkt überschreibbar :cry:, aber :angle:
Delphi-Quellcode:
procedure TControl.SetTextBuf(Buffer: PChar);
begin
  Perform(WM_SETTEXT, 0, Buffer);
  Perform(CM_TEXTCHANGED, 0, 0);
end;

Kas Ob. 28. Nov 2023 08:58

AW: Geisterjagt
 
Hi,
There is many cause, but to diagnose we need a lot of context and questions, also there is many ways to capture this, yet again many gaps to find the best and shortest solution.

But first thing comes to my mind:
1) Is there language managing component ?
2) If renaming works, yet i might missing something in translation, both at the same time should be renamed or each renamed will not have the text ? if separately then try to trick the ghost by rename one and add something outlandish with the same name, like put some Indy component and see if it will crash, if that didn't help then make one specific/customized component for one of them with overridden Caption/Text setter and set a break point on it.
..

Hope that helps.

Sherlock 28. Nov 2023 09:14

AW: Geisterjagt
 
Da Du Dich ja für eine numerierte Benennung entschieden hast, hast Du vermutlich auch irgendwo eine Schleife, in der Du dieses "Feature" verwendest. Such also nach etwas, daß so ähnlich aussieht wie FindComponent("GroupBox" + i). Darum passiert auch nichts, sobald Du den Komponenten korrekte Namen gibst.

Edelfix 28. Nov 2023 10:20

AW: Geisterjagt
 
Das Rätzel konnte gelöst werden.

Eure Tipps wahren genau richtig. Es gibt eine alte „Translate Form“ Funktion. In der Funktion gibt es eine Schleife durch alle Komponenten der Form. Anscheinen ist die Funktion so ungünstig programmiert das sie die Caption mit der eingestellten Sprache überschreibt, sobald die Komponente gefunden wurde ohne zu berücksichtigen ob die original Caption noch passt. Altlasten.

Vielen Dank für die Hilfe.


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