![]() |
bezeichnernamen im quellcode dynamisch zusammenbauen?
hallo zusammen,
ich habe eine kleine delphi-frage, vllt. weiss jmd. weiter. folgender code gegeben:
Delphi-Quellcode:
es geht um die darstellung einer binaeruhr. die shapes sind die "lichter". mit den if-anweisungen rechne ich aus, welche lichter "brennen" sollen und welche nicht. wie man siehst, ist das viel aehnlicher code. hinzu kommt, dass ich das gleiche ja nochmal fuer die minuten und sekunden mache. das sieht ineffizient aus. kann ich das in einer art schleife oder in einer separaten prozedur auslagern? das waere schoen. es gibt nur ein problem: die bezeichnernamen fuer die shapes sind jedes mal andere: ShpStd32Akt.Brush, ShpStd16Akt.Brush, ShpStd8Akt.Brush, ... kurzum:
if Std div 32 = 0 then ShpStd32Akt.Brush.Color := FarbeInaktiv
else begin ShpStd32Akt.Brush.Color := FarbeAktiv; Std := Std - 32; end; if Std div 16 = 0 then ShpStd16Akt.Brush.Color := FarbeInaktiv else begin ShpStd16Akt.Brush.Color := FarbeAktiv; Std := Std - 16; end; if Std div 8 = 0 then ShpStd8Akt.Brush.Color := FarbeInaktiv else begin ShpStd8Akt.Brush.Color := FarbeAktiv; Std := Std - 8; end; if Std div 4 = 0 then ShpStd4Akt.Brush.Color := FarbeInaktiv else begin ShpStd4Akt.Brush.Color := FarbeAktiv; Std := Std - 4; end; if Std div 2 = 0 then ShpStd2Akt.Brush.Color := FarbeInaktiv else begin ShpStd2Akt.Brush.Color := FarbeAktiv; Std := Std - 2; end; if Std div 1 = 0 then ShpStd1Akt.Brush.Color := FarbeInaktiv else begin ShpStd1Akt.Brush.Color := FarbeAktiv; Std := Std - 1; end; kann ich in delphi einen bezeichnernamen --> im quellcode <-- durch eine variable dynamisch ergaenzen? z.b.: ShpStdXAkt.Brush und fuer X wird dann mit jedem z.b. prozeduraufruf ein individueller wert eingesetzt. besten dank im voraus, ltmick. |
Re: bezeichnernamen im quellcode dynamisch zusammenbauen?
Hallo,
kannst Du ShpStd nicht in ein Array packen? An Position 0 ShpStd1 = 2^0 An Position 1 ShpStd2 = 2^1 An Position 2 ShpStd4 = 2^2 ... Grüße Klaus |
Re: bezeichnernamen im quellcode dynamisch zusammenbauen?
Moin ltmick,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS. Die Shapes könntest Du einfach mit einem ![]() |
Re: bezeichnernamen im quellcode dynamisch zusammenbauen?
beides schoene loesungen - danke, ihr habt mir sehr geholfen!
ciao, ltmick. |
Re: bezeichnernamen im quellcode dynamisch zusammenbauen?
hm, dann haette ich jetzt jedoch noch eine ergaenzungsfrage:
Delphi-Quellcode:
habe also meine sagen wir mal 16 shapes. immer, wenn eines angeklickt wird, soll sich die farbe aendern (in FarbeAktiv oder FarbeInaktiv (konstanten) - je nach vorigem status). soweit, so gut. aber wieder viel code, oben sind ja nur 2 beispiele als ausschnitt.
procedure TForm1.ShpStd32ProgMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if ShpStd32Prog.Brush.Color = FarbeInaktiv then ShpStd32Prog.Brush.Color := FarbeAktiv else ShpStd32Prog.Brush.Color := FarbeInaktiv; end; { **************************************************************************** } procedure TForm1.ShpStd16ProgMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if ShpStd16Prog.Brush.Color = FarbeInaktiv then ShpStd16Prog.Brush.Color := FarbeAktiv else ShpStd16Prog.Brush.Color := FarbeInaktiv; end; ... es waere schoen, wenn ich bei jedem klick auf ein shape auf die selbe ereignismethode verweisen koennte im objektinspektor. dazu muesste aber im code der bezeichnername der jeweiligen shape-komponente, die ich angeklickt habe, ausgelesen werden, damit die richtige shape ihre farbe aendert. also: wie kann man beim klick auf eine komponente ihren eigenen namen als string auslesen? und das auch, wenn ich beim klick auf verschiedene shapes auf stets ein und dieselbe ereignismethode verweise? moechte es mit findcomponent loesen, wenn moeglch. ist die loesung irgendetwas mit "self"? kenne mich nicht genug aus. danke erneut im voraus, ciao, ltmick. |
Re: bezeichnernamen im quellcode dynamisch zusammenbauen?
Moin ltmick,
Sender ist schon die gewünschte Komponente. So müsste es gehen:
Delphi-Quellcode:
procedure TForm1.ShpStd32ProgMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const _aclFarben : array [boolean] of TColor = (FarbeInaktiv,FarbeAktiv); begin (Sender as TShape).Brush.Color := _aclFarben[(Sender as TShape).Brush.Color = FarbeInaktiv]; end; |
Re: bezeichnernamen im quellcode dynamisch zusammenbauen?
wunderbar - schon wieder eine schnelle loesung. danke!
ciao, ltmick. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 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