Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponente gesucht (https://www.delphipraxis.net/83251-komponente-gesucht.html)

papabaer 29. Dez 2006 21:25


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.

TwoFace 29. Dez 2006 21:28

Re: Komponente gesucht
 
Servus

Gugg mal hier hin: Einer zur Laufzeit erzeugten Komponente ein Ereignis zuweisen

Greetz

papabaer 29. Dez 2006 23:05

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.

rey003 29. Dez 2006 23:25

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! :?

fkerber 30. Dez 2006 01:40

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

Bernhard Geyer 30. Dez 2006 06:04

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.

Hawkeye219 30. Dez 2006 10:24

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:
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;
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.

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

papabaer 30. Dez 2006 12:44

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 02:35 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