![]() |
Komponente gesucht
Ich hab ein Problem mit dem Ausblenden einer Komponente... und bin aber nicht ganz sicher, ob es in diesem Forum richtig ist.
Ich habe ein etwas komplexeres Programm geschrieben, in dem auch zur Laufzeit Komponenten erstellt werden. Bestimmte Komponenten sind in einzelnen Programmteilen nicht sichtbar. Nun passiert es mir aber, dass ich in einem Programmteil in einem Bereich "etwas" anklicken kann, von dem ich aber nicht feststellen kann, was es eigentlich ist. Normalerweise dürfte dort nichts liegen ..., d. h. ich müsste dort nachbessern. Daher meine Frage: Gibt es eine Möglichkeit, pauschal den Namen einer angeklickten Komponente zu erhalten, d. h. ich klicke irgendwo drauf und er zeigt mir (z. B. in einem Edit-Feld) den Namen der Komponente an. |
Re: Komponente gesucht
|
Re: Komponente gesucht
Ja, aber das ist nicht mein Problem. Ich kann diese (unbekannte) Komponente anklicken - es gibt sogar eine Fehlermeldung (Fehler in Modul... usw.) - aber ich will ja wissen, welche Komponente es war ... und das möglichst ohne (per Hand) allen nochmal zu sagen, dass sie sich anzeigen sollen.
Ich bräuchte also etwas, was universell abfängt und mir dann sagt, wer das Ereignis verarbeiten soll. |
Re: Komponente gesucht
Also wenn ich das richtig verstanden hab willst du zur Laufzeit gucken welche Komponente das ist?
Dann versuch mal solche Programm wie X-Spy oder WinSpy (von Luckie)! Die zeigen dir an welche Komponente unter der Maus ist! (mit Handle, Namen und so weiter) Hoffe das hilft dir! :? |
Re: Komponente gesucht
Hi!
Könntest du den Titel deines Beitrages noch ein wenig anpassen? So ganz kann man nicht auf das Thema schließen. Vielleicht wäre z.B. "Komponente unter Mauszeiger ermitteln" besser.... Ciao, Frederic |
Re: Komponente gesucht
In der Jedi Code Library gibt es eine Unit mit der man den Aufrufstack einfach bestimmen kann und z.b. in ein Logdatei schreiben kannst. Über denn Aufrufstack bekommst Du dann mit wo und woher der Fehler stammt.
|
Re: Komponente gesucht
Hallo papabaer,
vielleicht hilft dir dieser Vorschlag: ziehe eine TApplicationEvents-Komponente (Registerkarte "Zusätzlich") auf dein Hauptformular und weise ihrem OnMessage-Ereignis die folgende Behandlungsroutine zu:
Delphi-Quellcode:
Wenn du nun dein Programm startest und mit dem Mauszeiger über die Controls fährst, werden in der Titelzeile des Hauptformulars Klassenname und Name des Controls unter dem Mauszeiger angezeigt. Möglicherweise entdeckst du ja so das gesuchte Element.
procedure TForm1.ApplicationEvents1Message (var Msg: tagMSG; var Handled: Boolean);
var WinControl : TWinControl; Control : TControl; begin if (Msg.message = WM_MOUSEMOVE) then begin WinControl := FindVCLWindow(Msg.pt); if (WinControl = nil) then Caption := '' else begin Control := WinControl.ControlAtPos(WinControl.ScreenToClient(Msg.pt), True); if (Control = nil) then Control := WinControl; Caption := Format('%s (name="%s")', [Control.ClassName, Control.Name]); end; end; end; Nach dem Abschluß deiner Untersuchungen solltest du den Code wieder aus dem Programm entfernen. Alle Nachrichten durchlaufen die Routine und bremsen somit die Applikation unnötig aus. Gruß Hawkeye |
Re: Komponente gesucht
Danke, das hat geholfen ... und ich habe meinen Fehler gefunden ... hatte letztlich irgendwo eine Schleife von 1 bis ... statt von 0 bis ... laufen lassen.
Einen guten Rutsch an alle :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 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