AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Noten als enum auslegen
Thema durchsuchen
Ansicht
Themen-Optionen

Noten als enum auslegen

Ein Thema von EWeiss · begonnen am 16. Apr 2018 · letzter Beitrag vom 17. Apr 2018
Antwort Antwort
Seite 1 von 3  1 23      
EWeiss
(Gast)

n/a Beiträge
 
#1

Noten als enum auslegen

  Alt 16. Apr 2018, 17:32
Ich erstelle ein Enum um die Noten zu transponieren.

 TTranspose = (C = 1, C# = 2, D = 3, D# = 4, E = 5, F = 6, F# = 7, G = 8, G# = 9, A = 10, A# = 11, B = 12);

Jetzt meldet der Compiler C wäre redifiniert.
Wie wäre es richtig?

Ich brauche die Bezeichnungen als String im Enum.
Oder kann man dies später zu einem Array assigned?

gruss

Geändert von EWeiss (16. Apr 2018 um 17:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Noten als enum auslegen

  Alt 16. Apr 2018, 17:34
Du kannst "#" nicht in Bezeichnern verwenden.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Noten als enum auslegen

  Alt 16. Apr 2018, 17:37
Du kannst "#" nicht in Bezeichnern verwenden.
Ja das habe ich mir gedacht deshalb der Fehler.
Nur wie könnte man es anders besser machen?

Ich brauche die Halbtöne.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Noten als enum auslegen

  Alt 16. Apr 2018, 17:38
Naja, einfach anders benennen halt C_HALF/C_MAJOR oder so.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Noten als enum auslegen

  Alt 16. Apr 2018, 17:42
Naja, einfach anders benennen halt C_HALF/C_MAJOR oder so.
Delphi-Quellcode:
function TransposeChord(sChord: string; Pitch: Integer): string;
var
  sResult: string;
  sTranspose: Array[1..12] of TTranspose;
  K, MaxK, Found: Integer;
begin

  sResult := sChord;
  MaxK := High(sTranspose);

  for K := 1 to MaxK do
  begin
    if sTranspose[K] = sChord then
    begin
      Found := (K + Pitch) mod MaxK;
      if Found < 1 then
        inc(Found, MaxK);

      sResult := sTranspose[Found];
      break;
    end;
    Result := sResult;
  end;
end;
Nun einfach?
Umbenennen ist nicht möglich wie gesagt ich brauche den String 'C#'

gruss
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#6

AW: Noten als enum auslegen

  Alt 16. Apr 2018, 17:44
Eine separate Methode zum Konvertieren zwischen Enum und String wäre dann sinnvoll.
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Noten als enum auslegen

  Alt 16. Apr 2018, 17:47
Eine separate Methode zum Konvertieren zwischen Enum und String wäre dann sinnvoll.
Dann mache ich es so..
Delphi-Quellcode:
const
cTranspose : Array[TTranspose ] of String = ('C, 'C#, 'D, 'D#');
und benenne das enum um.
Danke.

gruss

Geändert von EWeiss (16. Apr 2018 um 18:55 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Noten als enum auslegen

  Alt 16. Apr 2018, 18:11
Sorry bin wieder blöd heute.

Delphi-Quellcode:
type
  TTranspose = (C, C_, D, D_, E, F, F_, G, G_, A, A_, B);

const
  cTranspose : Array[TTranspose] of String = ('C', 'C#', 'D', 'D#', 'E', 'F', 'F#',
    'G', 'G#', 'A', 'A#', 'B');
Delphi-Quellcode:
function TransposeChord(sChord: string; Pitch: Integer): string;
var
  sResult: string;
  sTranspose: Array[0..11] of TTranspose; // scheint ein Problem mit dieser Definition zu sein. aber brauche ein Array wenn auch vielleicht nicht dieses
  K, MaxK, Found: Integer;
begin

  sResult := sChord;
  MaxK := High(sTranspose);

  for K := 0 to MaxK do
  begin
    if cTranspose[sTranspose[K]] = sChord then
    begin
      Found := (K + Pitch) mod MaxK;
      if Found < 1 then
        inc(Found, MaxK);

      sResult := cTranspose[sTranspose[Found]];
      break;
    end;
    Result := sResult;
  end;
end;
kann mir bitte jemand auf die Sprünge helfen ?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Noten als enum auslegen

  Alt 16. Apr 2018, 18:12
# gibt es so ähnlich auch als andere Unicodezeichen ... wenn dieses andere Zeichen vom Compiler als "gültiges" alphanumerisches Zeichen anerkannt ist, dann könnte man auch das nehmen.
Aber ohne Codevervollständigung oder Copy&Paste sind solche Namen dann schwer zu schreiben, so als würdest du ohne IME versuchen chinesische Typenbezeichner zu verwenden.
$2B or not $2B
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Noten als enum auslegen

  Alt 16. Apr 2018, 18:14
# gibt es so ähnlich auch als andere Unicodezeichen ... wenn dieses andere Zeichen vom Compiler als "gültiges" alphanumerisches Zeichen anerkannt ist, dann könnte man auch das nehmen.
Aber ohne Codevervollständigung oder Copy&Paste sind solche Namen dann schwer zu schreiben, so als würdest du ohne IME versuchen chinesische Typenbezeichner zu verwenden.
Bekomme hier außerhalb des gültigen Bereich.
if cTranspose[sTranspose[K]] = sChord then

Ich erzeuge hier 12 x mal TTranspose
sTranspose: Array[0..11] of TTranspose;

Obwohl ich nur den Wert innerhalb eines einmalig erstellen TTranspose benötige.
Das scheint mein Fehler zu sein. (Array ist eigentlich überflüssig) Hmmm...
Aber ohne kann ich K nicht auswerten.

Heute ist ein schlechter Tag.. Hehehehehehe

EDIT:
Ok hat sich erledigt.
Delphi-Quellcode:
function TransposeChord(sChord: string; Pitch: Integer): string;
var
  sResult: string;
  K, MaxK, Found: Integer;
begin

  sResult := sChord;
  MaxK := 12;

  for K := 0 to (MaxK - 1) do
  begin
    if cTranspose[TTranspose(K)] = sChord then
    begin
      Found := (K + Pitch) mod MaxK;
      if Found < 1 then
        inc(Found, MaxK);

      sResult := cTranspose[TTranspose(Found)];
      break;
    end;
    Result := sResult;
  end;
end;
gruss

Geändert von EWeiss (16. Apr 2018 um 18:27 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 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