Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Noten als enum auslegen (https://www.delphipraxis.net/196026-noten-als-enum-auslegen.html)

EWeiss 17. Apr 2018 00:20

AW: Noten als enum auslegen
 
Zitat:

Ja, wenn man denn einen der vielen richtigen Wege geht.
Seltsam nur das bei mir die richtigen Ergebnisse ausgegeben werden.

Siehe shot

oben A ,B genau das was erwartet wird.

Delphi-Quellcode:
for k = 0 to xx do
begin

end
Result := bla; // und hier das result. dort wird ausgewertet wenn die schleife beendet wird auf welchen weg auch immer.
Keine Ahnung was du willst?
Zitat:

Die Zeile Result := sResult wird nicht ausgeführt.
Wird immer ausgeführt.

Zitat:

Eine Zeile tiefer steht ein "end;", und unter die Zeile mit dem "end;" soll es gebracht werden, also 1 + 1 = 2 Zeilen tiefer.
Keine Ahnung was du da rechnest oder meinst zu sehen.
Wie ich schon sagte 1 zeile tiefer.

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 < 0 then
        inc(Found, MaxK);

      sResult := cTranspose[TTranspose(Found)];
      break;
    end;
  end;
  Result := sResult;
end;
EIne Zeile tiefer vergleiche es!
Vorher stand es über den End nun drunter.

gruss

KodeZwerg 17. Apr 2018 00:35

AW: Noten als enum auslegen
 
ot
Hör auf so viele geniale Bilder zu Zaigen, da werd ich blass vor Neid! (soll ein Kompliment sein)
/ot

Amateurprofi 17. Apr 2018 01:39

AW: Noten als enum auslegen
 
Zitat:

Zitat von EWeiss (Beitrag 1399448)
Zitat:

Ja, wenn man denn einen der vielen richtigen Wege geht.
Seltsam nur das bei mir die richtigen Ergebnisse ausgegeben werden.

Siehe shot

oben A ,B genau das was erwartet wird.

Delphi-Quellcode:
for k = 0 to xx do
begin

end
Result := bla; // und hier das result. dort wird ausgewertet wenn die schleife beendet wird auf welchen weg auch immer.
Keine Ahnung was du willst?
Zitat:

Die Zeile Result := sResult wird nicht ausgeführt.
Wird immer ausgeführt.

Zitat:

Eine Zeile tiefer steht ein "end;", und unter die Zeile mit dem "end;" soll es gebracht werden, also 1 + 1 = 2 Zeilen tiefer.
Keine Ahnung was du da rechnest oder meinst zu sehen.
Wie ich schon sagte 1 zeile tiefer.

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 < 0 then
        inc(Found, MaxK);

      sResult := cTranspose[TTranspose(Found)];
      break;
    end;
  end;
  Result := sResult;
end;
EIne Zeile tiefer vergleiche es!
Vorher stand es über den End nun drunter.

gruss

Ich hatte mich auf die Funktion in deinem Beitrag #10 bezogen.
In der stand das
Delphi-Quellcode:
Result:=sResult;
innerhalb der For-Schleife, wurde also nicht ausgeführt, wenn die For-Schleife mit Break verlassen wird.
Ich hatte dann u.A. vorgeschlagen das
Delphi-Quellcode:
Result:=sResult;
2 Zeilen nach unten, also hinter die For-Schleife zu verschieben.
Zu diesem Vorschlag hattest du in #19 gesagt
Zitat:

Na ja eine Zeile tiefer.

Wird aber in jedem fall aufgerufen auch wenn ich es so belassen würde.
er Wert wird also in jedem fall richtig übergeben.
Und hierzu hatte ich angemerkt, dass das nicht richtig ist.

Hierzu sagst du
Zitat:

Seltsam nur das bei mir die richtigen Ergebnisse ausgegeben werden.

Siehe shot

oben A ,B genau das was erwartet wird.

Welcher "Shot" ?
Und ja klar bringt die von dir jetzt gezeigte Funktion richtige Ergebnisse, denn sie enthält ja auch die von mir vorgeschlagenen Korrekturen, insbesondere die, das
Delphi-Quellcode:
Result:=sResult;
hinter die For-Schleife zu verschieben.
Mein Einwand bezog sich aber auf deinen Kommentar, dass auch dann wenn man das
Delphi-Quellcode:
Result:=sResult;
so belässt (also innerhalb der For-Schleife), die richtigen Werte übergeben werden.

EWeiss 17. Apr 2018 01:44

AW: Noten als enum auslegen
 
Zitat:

Mein Einwand bezog sich aber auf deinen Kommentar, dass auch dann wenn man das Result:=sResult; so belässt (also innerhalb der For-Schleife), die richtigen Werte übergeben werden.
Nein wenn ich es da belassen hätte wären die werte falsch. Korrekt.

Na ok dann habe ich dich falsch verstanden. Entschuldige bitte.
Danke! ;)

Zitat:

Welcher "Shot" ?
Habe ihn wieder gelöscht.

gruss

himitsu 17. Apr 2018 10:29

AW: Noten als enum auslegen
 
Delphi-Quellcode:
c_, c, c¯, c&#8962;, c&#685;, c&#36133;


Ob auch sowas als Bezeichner erlaubt ist, hab ich jetzt nicht getestet.
[edit] Die ersten 4 sind erlaubt, seit 2009. :stupid:
♬ ♮ ♫ ♯ ♮
https://unicode.org/charts/PDF/U1D100.pdf
https://de.wikipedia.org/wiki/Unicod...schriftzeichen

EWeiss 17. Apr 2018 11:19

AW: Noten als enum auslegen
 
Zitat:

Zitat von himitsu (Beitrag 1399499)
Delphi-Quellcode:
c_, c, c¯, c&#8962;, c&#685;, c&#36133;


Ob auch sowas als Bezeichner erlaubt ist, hab ich jetzt nicht getestet.
[edit] Die ersten 4 sind erlaubt. :stupid:
♬ ♮ ♫ ♯ ♮
https://unicode.org/charts/PDF/U1D100.pdf
https://de.wikipedia.org/wiki/Unicod...schriftzeichen

Was es nicht alles gibt :)

gruss

Neutral General 17. Apr 2018 11:48

AW: Noten als enum auslegen
 
Zitat:

Zitat von himitsu (Beitrag 1399499)
Delphi-Quellcode:
c_, c, c¯, c&#8962;, c&#685;, c&#36133;


Ob auch sowas als Bezeichner erlaubt ist, hab ich jetzt nicht getestet.
[edit] Die ersten 4 sind erlaubt, seit 2009. :stupid:
♬ ♮ ♫ ♯ ♮
https://unicode.org/charts/PDF/U1D100.pdf
https://de.wikipedia.org/wiki/Unicod...schriftzeichen

Ich hab irgendwie Probleme die einzubinden.
Weder direkt per Copy&Paste noch Caption := #$1D120; funktioniert.
Ich bekomme da nur Kästchen. Hab auch ein paar gängige Schriftarten ausprobiert :|

Daniel 17. Apr 2018 11:52

AW: Noten als enum auslegen
 
Das hat mit den Noten jetzt aber weniger zutun.

himitsu 17. Apr 2018 12:12

AW: Noten als enum auslegen
 
Ja, nicht alle Zeichen sind überall (gut) sichtbar.
Bei ♬ ♮ ♫ ♯ ♮ sehe ich im XE den Letzten auch nur als Kästchen, weil es in der Schrift dieses Zeichen nicht gibt und keine Umleitung zu einer anderen Schrift für dieses Zeichen registriert wurde.
Und dazu kommt dann noch, dass bei der gleichbreiten rechteckigen kleinen Schrift im Editor vieles nicht erkennbar ist.

Aber grundsätzlich ging es ja nur darum "Noten" als Bezeichner zu verwenden, was prinzipiell geht.

Bezeichner unterliegen einer gewissen Syntax (vor dem Unicode-Compiler war sie noch recht simpel, aber inzwischen ist wesentlich mehr erlaubt)

Als RegEx
Delphi-Quellcode:
^[A-Za-z_][A-Za-z_0-9]*$
für Delphi 7
und für ab D2009
Delphi-Quellcode:
^([[:alnum:]]|_)([[:alnum:]]|_)*$
.
Delphi-Quellcode:
Aus SysUtils des XE, aber groß wird sich daran nicht viel gändert haben.

function IsValidIdent(const Ident: string; AllowDots: Boolean): Boolean;
{$IFNDEF UNICODE}
const
  Alpha = ['A'..'Z', 'a'..'z', '_'];
  AlphaNumeric = Alpha + ['0'..'9'];
  AlphaNumericDot = AlphaNumeric + ['.'];
var
  I: Integer;
begin
  Result := False;
  if (Length(Ident) = 0) or not (Ident[1] in Alpha) then Exit;
  if AllowDots then
    for I := 2 to Length(Ident) do
      begin
        if not (Ident[I] in AlphaNumericDot) then Exit
      end
  else
    for I := 2 to Length(Ident) do if not (Ident[I] in AlphaNumeric) then Exit;
  Result := True;
end;
{$ELSE UNICODE}
  function Alpha(C: Char): Boolean; inline;
  begin
    Result := TCharacter.IsLetter(C) or (C = '_');
  end;

  function AlphaNumeric(C: Char): Boolean; inline;
  begin
    Result := TCharacter.IsLetterOrDigit(C) or (C = '_');
  end;

  function AlphaNumericDot(C: Char): Boolean; inline;
  begin
    Result := TCharacter.IsLetterOrDigit(C) or (C = '_') or (C = '.');
  end;

var
  I: Integer;
begin
  Result := False;
  if (Length(Ident) = 0) or not Alpha(Ident[1]) then
    Exit;
  if AllowDots then
    for I := 2 to Length(Ident) do
      begin
        if not AlphaNumericDot(Ident[I]) then
          Exit
      end
  else
    for I := 2 to Length(Ident) do
      if not AlphaNumeric(Ident[I]) then
        Exit;
  Result := True;
end;
{$ENDIF UNICODE}


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 Uhr.
Seite 3 von 3     123   

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