![]() |
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? |
AW: Geisterjagt
Sind da Umlaute enthalten?
|
AW: Geisterjagt
Unit Vcl.Controls
procedure TControl.SetText da einen Haltepunkt rein und vielleicht noch
Delphi-Quellcode:
oder
Self.Name = 'ComboBox1'
Delphi-Quellcode:
als Bedingung für diesen Haldepunkt :stupid:
Self is TComboBox
(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:
Leider waren weder SetText, noch SetTextBuf, virtual, also nicht direkt überschreibbar :cry:, aber :angle:
procedure TComboBox.CMTextChanged(var Message: TMessage);
begin inherited; << hier der Haltepunkt end;
Delphi-Quellcode:
procedure TControl.SetTextBuf(Buffer: PChar);
begin Perform(WM_SETTEXT, 0, Buffer); Perform(CM_TEXTCHANGED, 0, 0); end; |
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. |
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.
|
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 02:49 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 by Thomas Breitkreuz