Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi feststellen ob geklickt ohne Klick-Prozedur (https://www.delphipraxis.net/35316-feststellen-ob-geklickt-ohne-klick-prozedur.html)

Neutral General 5. Dez 2004 15:05

Re: feststellen ob geklickt ohne Klick-Prozedur
 
Ok ich nehm alles zurück :oops:

TheAn00bis 5. Dez 2004 15:18

Re: feststellen ob geklickt ohne Klick-Prozedur
 
Aber ich brauch doch für find Component erst mal das Sufix des Panels oder nicht?

Ach ich erklär einfach alles:

Also jedes der PAnel hat eine andere Farbe, jetzt will ich rausfinden, welche Farbe das geklickte Panel hat. Allerdings eben nicht für jedes PAnel eine neue Procedure. Leider hat ein Panel ja kein Canvas, deshalb geht Panel1.Canvas.pixels[x,y] ja nicht. Allerdings will ich auch kein Bild nehmen und ein Grid ist mir zu aufwendig.

mirage228 5. Dez 2004 15:22

Re: feststellen ob geklickt ohne Klick-Prozedur
 
Zitat:

Zitat von TheAn00bis
Aber ich brauch doch für find Component erst mal das Sufix des Panels oder nicht?

Ach ich erklär einfach alles:

Also jedes der PAnel hat eine andere Farbe, jetzt will ich rausfinden, welche Farbe das geklickte Panel hat. Allerdings eben nicht für jedes PAnel eine neue Procedure. Leider hat ein Panel ja kein Canvas, deshalb geht Panel1.Canvas.pixels[x,y] ja nicht. Allerdings will ich auch kein Bild nehmen und ein Grid ist mir zu aufwendig.

Hi,

dann würde ich folgendes machem.

Im private oder public Bereich Deines Forms (je nach dem, wo du es brauchst) erstellst Du eine Variable vom Typ Delphi-Referenz durchsuchenTColor.
(In dem Beispiel nenne ich die Variable mal "MyColorVar")

Dein Panel kennt ja die Eigenschaft Color, also dürfte das ganz passend sein.

In die OnClick-Methode, die Du jedem Panel zuweist, schreibst du Folgendes:
Delphi-Quellcode:
begin
  if (Sender is TPanel) then
    MyColorVar := TPanel(Sender).Color;
end;
mfG
mirage228

TheAn00bis 5. Dez 2004 15:30

Re: feststellen ob geklickt ohne Klick-Prozedur
 
Hab vielen Dank, klappt perfekt!

Noch eine Frage, die if Abfrage ist doch eigentlich überflüßig, da die Procdur ja nur bei einem Panel-Klick ausgeführt wird, oder? Und was ich nicht verstehe, wenn der Sender TPanel ist (dann steht ja in "Sender" nur TPanel oder nicht?), warum erkennt der dann mit TPanel(Sender).Color; die Nummer des PAnels?


Anubis, besser gleich richtig fragen....

Jens Schumann 5. Dez 2004 15:33

Re: feststellen ob geklickt ohne Klick-Prozedur
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Zitat:

Zitat von TheAn00bis
... Leider hat ein Panel ja kein Canvas, deshalb geht Panel1.Canvas.pixels[x,y] ja nicht. ...

Das ist so nicht richtig. TPanel hat eine Canvas property. Nur nicht sichtbar, da protected.
So ein Problem lößt man am schnellsten mit einem TPanel-Dummy.
Hier kommt der Dummy:
Delphi-Quellcode:
Type
  TPanelCanvas = class(TPlanel)
  public
    property Canvas;
  end;
Das ist erstmal alles!
Jetzt kannst Du in dem OnMouseUpEventhandler folgendes schreiben
Delphi-Quellcode:
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  If Sender is TPanel then
    TPanelCanvas(Sender).Canvas.Pixels[X,Y]:=clRed;
end;
Wie man sieht, wird nie eine Instanz der TPanelCanvas erzeugt, sondern das Ding
wird nur für einen Typecast verwendet.

In der Anlage ist ein kleines Beispiel

mimi 5. Dez 2004 15:38

Re: feststellen ob geklickt ohne Klick-Prozedur
 
er erkennt keien nummer sonder die farbe *G* in sender steht der name drin von wo aus die procedure aufgerufen wurden ist und jetzt kann man mit sender is TPannel prüfen ob es ein TPannel überhaupt ist, ist es nur eine sicherheitsabrfage.

TheAn00bis 5. Dez 2004 15:39

Re: feststellen ob geklickt ohne Klick-Prozedur
 
Danke für deine Antwort, Jens!

Ist wirklich nützlich zu wissen, dass es möglich ist, auf ein Panel zu zeichnen. Gibt es denn noch mehr Objekte mit einem versteckten Canvas? Wie finde ich das raus? [hoffe das geht nicht zu sehr ins OT...]


Zitat:

Zitat von mimi
er erkennt keien nummer sonder die farbe *G* in sender steht der name drin von wo aus die procedure aufgerufen wurden ist und jetzt kann man mit sender is TPannel prüfen ob es ein TPannel überhaupt ist, ist es nur eine sicherheitsabrfage.

die Farbe erkennt er durch das .color, das ist selbst mir klar :P. Aber was genau steht denn jetzt im Sender? Panel1, oder was, was macht dann das TPanel davor? Ich schreib doch sonst auch nicht TPanel.Panel1.Color sondern nur Panel1.color.

Jens Schumann 5. Dez 2004 15:40

Re: feststellen ob geklickt ohne Klick-Prozedur
 
Zitat:

Zitat von mimi
er erkennt keien nummer sonder die farbe *G* in sender steht der name drin von wo aus die procedure aufgerufen wurden ist und jetzt kann man mit sender is TPannel prüfen ob es ein TPannel überhaupt ist, ist es nur eine sicherheitsabrfage.

Achtung: In Sender steht nicht der Name, sondern es handelt um eine Referenz auf das Objekt, dass das Event ausgelöst hat.

Jens Schumann 5. Dez 2004 15:42

Re: feststellen ob geklickt ohne Klick-Prozedur
 
Zitat:

Zitat von TheAn00bis
Danke für deine Antwort, Jens!

Ist wirklich nützlich zu wissen, dass es möglich ist, auf ein Panel zu zeichnen. Gibt es denn noch mehr Objekte mit einem versteckten Canvas? Wie finde ich das raus? [hoffe das geht nicht zu sehr ins OT...]

Ganz einfach - in den VCL-Sourcecode schauen.
Alle Nachfahren von TCustomControl und TGraphicControl haben die Canvas property.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr.
Seite 2 von 2     12   

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