Autor Beitrag
MrBlack
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 22.11.09 12:35 
Hallo ich hab ein weiteres Problem. Ich brauche runde,farbige Objekte, die eine OnClick Methode haben.

Das Problem ist, dass ich bei Buttons weder die Farbe, noch die Form ändern kann - sie haben aber nen OnClick Ereignis.

Ein Panel kann ich farbig machen, es hat ein OnClick Ereignis, ist aber nicht rund.

Ein Shape ist rund, ich kann es farbig machen, aber es hat kein OnClick Ereignis.

Nun ist meine Frage, ob ich einem Shape auch noch irgendwie nen OnClick Ereignis hinzufügen kann. Ich mache es momentan so, dass ich ein transparentes, farbloses Image auf mein Shape lege. Aber das ist leider alles ein wenig umständlich. Gibt es da vielleicht auch noch andere Lösungen?

Danke für eure Hilfe!


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 23.11.2009 um 09:15
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: So 22.11.09 12:49 
Hallo MrBlack,

nimm doch das OnMouseDown Ereignis, aber Du musst dann selbst abfragen, welche Taste gedrückt ist, aber die eine IF-Abfrage...

Gruß
Guenther
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 22.11.09 14:00 
Abgesehen davon: Wozu überhaupt so viele visuelle Komponenten? Das macht die Oberfläche doch nur extrem träge und das ganze ist unnötig schwer zu programmieren.

In einer TPaintBox geht das viel besser. Also so wie ich es auch hier benutzt habe, dort nutze ich nur eine große TPaintBox:
www.delphi-forum.de/viewtopic.php?p=557541
MrBlack Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 22.11.09 17:28 
Danke GuaAck! Ich hab das Problem jetzt mit nem MouseDown Ereignis gelöst. Jetzt habe ich aber ein weiteres Problem. Ich habe 60 Shapes und die sollen alle ein MouseDown Ereignis erhalten. (und sollen alle dieselben Befehle ausführen) Muss ich dann für jedes einzelne Shape ne eigene MouseDown-Procedure machen mit dem gleichen Inhalt?? Das muss doch irgendwie komfortabler gehen oder??? Ich hoffe es kann mir wer helfen... Danke!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 22.11.09 17:32 
Du kannst im Objektinspektor einfach jedem Shape die selbe Ereignisbehandlungsprozedur zuweisen. :zwinker:

Im Sender steht dann das Shape drin, von dem der Klick kam. Damit musst du dann arbeiten. Zum Beispiel kannst du über die Tag-Eigenschaft die Verknüpfung zu den dahinterstehenden Daten herstellen.
Heißt zum Beispiel alle durchnummeriert und in einem Array stehen doie dazugehörigen Daten oder ähnliches, das kommt auf den Anwendungszweck an.

(Dass es so unnötig kompliziert wird, sagte ich ja schon. :lol: Zudem hast du so erst einmal keine MouseOver-Effekte usw.)
MrBlack Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 22.11.09 18:08 
Ok, ich habe jetzt allen Shapes über den Objektinspektor die gleiche Prozedur zugewiesen. Allerdings weiß ich nicht wie ich das mit dem Sender verarbeiten kann. Könntest du mir dafür vielleicht mal ein Beispiel geben? (z.B. soll das jeweilige Shape, das gesendet hat, rot gefärbt werden...) Die ganzen Shapes habe ich auch übrigens schon in einem Array zusammengefasst...

Oh und ich weiß nicht wie ich an eine TPaintBox komme, bzw. weiß nicht wie die funktioniert. Deshalb hab ich das erstmal mit Shapes gemacht...

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

ah, ok, habs gerade schon selbst rausgefunden. Ich kanns einfach mit na if abfrage machen...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if Sender=Shape1 then
begin
   shape1.brush.color:=clred;
end;

Allerdings gehts ja leider nicht direk oder? Also so nach dem Motto:
ausblenden Delphi-Quelltext
1:
sender.brush.color:=clred;					


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: So 22.11.09 19:08 
ausblenden Delphi-Quelltext
1:
(Sender As TShape).Color:= ClRed;					

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)