Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TShape markieren (https://www.delphipraxis.net/71481-tshape-markieren.html)

Martin.Ghosts 15. Jun 2006 22:14


TShape markieren
 
Hallo zusammen,
wie kann man eine Shape-Komponente während des laufenden Programms markieren?

Schonmal viele Dank, Martin.Ghosts

DGL-luke 15. Jun 2006 22:18

Re: TShape markieren
 
markieren? geht nicht. du kannst aber auf Mausklick reagieren und z.B. die farbe ändern... das könnte dann markiert aussehen ;)

Martin.Ghosts 15. Jun 2006 22:23

Re: TShape markieren
 
Schade, hab ich mir schon fast gedacht :wink:
Naja, trotzdem vielen Dank

DGL-luke 15. Jun 2006 22:35

Re: TShape markieren
 
naja, eigentlcih is es kein großes problem ;)

Delphi-Quellcode:
var
  markiert: TShape;
  defcolor,markiertcolor: TColor;

procedure ShapeClick(Sender: TObject);
begin
  if Assigned(markiert) then
    markiert.Color := defcolor;

  markiert := Sender as TShape;
  markiert.Color := markiertcolor;
end;

du musst jetzt nur markiert auf nil initialisieren und allen deinen shapes diese prozedur im OnClick zuweisen.

Selbstverständlich ist das mit der Farbe nur eine Möglcihkeit, du kannst auch die Form des shape ändern, seinen borderstyle, (wenns einen hat :stupid: ) einen rahmen rundrum ziehen (da musst du allerdings dann selber was zeichnen, stichwort OnPaint / Paint) etc.

Martin.Ghosts 16. Jun 2006 08:43

Re: TShape markieren
 
Hm, und bei einer unbekannten Anzahl an TShapes? Kann man dann mit array of TShape eine ShapeClick Methode mit n-TShapes durchführen?
(etwa so:)
Delphi-Quellcode:
for n:= 1 to AnzahlShapes do
  begin
    procedure TForm1.array[n]MouseDown (...);
      begin
      ..
      end;
  end;

DGL-luke 16. Jun 2006 09:47

Re: TShape markieren
 
vooooorsicht! Da schleicht sich ein Verständnisproblem ein.

Das "OnClick"-Ereignis ist nur ein Event. Das heisst, es ist nur ein Zeiger auf eine funktion (Funktionszeiger *g*).

Delphi-Quellcode:
shapearray[0].OnCLick := TNotifyEvent(01256);
wäre also durchaus eine zulässige Zuweisung. Alllerdings zeigt der Zeiger dann irgendwo in den reservierten Speicher. Es wird also beim aufruf nix gescheites rauskommen...

Wenn also jetzt ein Control merkt, "oh, da klickt mich wer", dann schaut es nach, ob ein Ereignis zugewiesen wurde. Wenn ja, wird die verknüpfte Prozedur aufgerufen.

Deshalb:

Delphi-Quellcode:
for i := 0 to high(shapearray) do
  shapearray[i].OnClick := ShapeClick;

(Übrigens wird das nicht funktionieren, wenn du die ShapeCLick-prozedur aus meinem vorherigen post nimmst. ShapeClick muss eine Methode sein, also in einer Klasse definiert, also etwa TForm1.ShapeClick)

EDIT: @3_of_8: :gruebel:

3_of_8 16. Jun 2006 09:49

Re: TShape markieren
 
Nimm den @-Operator da raus, der stört mich. ;)

EDIT: Sorry, Irrtum. Bei Ereignisse braucht man den anscheinend, aber bei nem TObject würde das nen Fehler geben.


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