Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi bezeichnernamen im quellcode dynamisch zusammenbauen? (https://www.delphipraxis.net/114831-bezeichnernamen-im-quellcode-dynamisch-zusammenbauen.html)

ltmick 1. Jun 2008 11:56


bezeichnernamen im quellcode dynamisch zusammenbauen?
 
hallo zusammen,

ich habe eine kleine delphi-frage, vllt. weiss jmd. weiter. folgender code gegeben:

Delphi-Quellcode:
  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;
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:

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.

Klaus01 1. Jun 2008 12:08

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

Christian Seehase 1. Jun 2008 12:13

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 Hier im Forum suchenFindComponent finden, können.

ltmick 1. Jun 2008 12:42

Re: bezeichnernamen im quellcode dynamisch zusammenbauen?
 
beides schoene loesungen - danke, ihr habt mir sehr geholfen!

ciao,
ltmick.

ltmick 1. Jun 2008 14:04

Re: bezeichnernamen im quellcode dynamisch zusammenbauen?
 
hm, dann haette ich jetzt jedoch noch eine ergaenzungsfrage:

Delphi-Quellcode:
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;

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

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.

Christian Seehase 1. Jun 2008 14:10

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;

ltmick 1. Jun 2008 17:18

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