Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Missing operator in verbindung mit ORD (https://www.delphipraxis.net/78603-missing-operator-verbindung-mit-ord.html)

marabu 7. Okt 2006 19:10

Re: Missing operator in verbindung mit ORD
 
Für die einzelnen Zeichen eines Strings s[i] kannst du mittels Ord(s[i]) den Codewert ermitteln. Wenn du aber den Platz berechnen möchtest, den eine Zeichenkette bei gegebenem Font einnimmt, dann geht das mit TCanvas.TextWidth(s) leichter.

Grüße

EWeiss 7. Okt 2006 19:10

Re: Missing operator in verbindung mit ORD
 
Zitat:

Zitat von Christian Seehase
Moin EWeiss,

Zitat:

Zitat von EWeiss
Verstehe ich nicht funktioniert in VB doch auch! ;)

das liegt aber daran, dass ASC in VB bei einem String immer das erste Zeichen des Strings nimmt, also müsstest Du in Delphi

Delphi-Quellcode:
ord(UpperCase(StrS[1]))
schreiben.


Ahhhh also IntX := IntX + BWidth(ORD(UpperCase(StrS[1])) - 65);

Dann wirds gehn... ?
Werde es mal testen.


Danke !

Gruß

EWeiss 7. Okt 2006 19:16

Re: Missing operator in verbindung mit ORD
 
PUSCH...

Nein geht trotzdem nicht.

Hmmm .. Steh jetzt auf den Schlauch :)

GRuß

mkinzler 7. Okt 2006 19:19

Re: Missing operator in verbindung mit ORD
 
Vielleicht
Delphi-Quellcode:
IntX := IntX + BWidth(ORD(UpperCase(StrS)[1]) - 65);
?

EWeiss 7. Okt 2006 19:21

Re: Missing operator in verbindung mit ORD
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von marabu
Für die einzelnen Zeichen eines Strings s[i] kannst du mittels Ord(s[i]) den Codewert ermitteln. Wenn du aber den Platz berechnen möchtest, den eine Zeichenkette bei gegebenem Font einnimmt, dann geht das mit TCanvas.TextWidth(s) leichter.

Grüße

Es ist kein Font es ist ein Strip gezeichnet in einen Bitmap.
Da geht nichts mit TCanvas.TextWidth sorry.

gruß

EWeiss 7. Okt 2006 19:24

Re: Missing operator in verbindung mit ORD
 
Zitat:

Zitat von mkinzler
Vielleicht
Delphi-Quellcode:
IntX := IntX + BWidth(ORD(UpperCase(StrS)[1]) - 65);
?

Nein nichts zu machen :|

Zitat:

[Pascal Error] frmGen.pas(211): E2066 Missing operator or semicolon
[Pascal Error] frmGen.pas(211): E2015 Operator not applicable to this operand type
gruß

EDIT: Ja '1' wird nachher ersetzt mit dem richtigen wert aus dem ASCII zeichen satz
wäre bei "A" DEZ = 65
Das habe ic hschon verstanden ... Aber es läuft trotzdem nicht :oops:

mkinzler 7. Okt 2006 19:31

Re: Missing operator in verbindung mit ORD
 
Splitte diese Zeile doch mal auf eun führe einen Schritt nach dem anderen durch, um zu sehen, was den Fehler verursacht.

EWeiss 7. Okt 2006 19:42

Re: Missing operator in verbindung mit ORD
 
Zitat:

Zitat von mkinzler
Splitte diese Zeile doch mal auf eun führe einen Schritt nach dem anderen durch, um zu sehen, was den Fehler verursacht.

Danke für den Rat
Komme aber gar nicht erst zum debuggen umd das Problem beheben zu können.

Diese Zeile "Asc(UCase(StrS)) - 65)" wenn StrS = "E" ist
liefert den wert 4 zurück was ja auch richtig ist.

Verstehe nicht das da so probleme sind!

gruß

marabu 7. Okt 2006 19:43

Re: Missing operator in verbindung mit ORD
 
Hallo Emil,

als ich Beitrag #5 schrieb habe ich deinen Beitrag #4 noch nicht gekannt - alles wird klar:

Delphi-Quellcode:
begin
    // ...

    For IntI := 1 To Length(StrView) do // index läuft ab 1
    begin
      //  StrS := MidStr(StrView, IntI + 1, 1); // nicht nötig
      if StrView[IntI] <> ' '
        then IntX := IntX + BWidth[Ord(UpCase(StrView[IntI])) - 65]; // nicht () sondern []
        else Inc(IntI(5); //Bei Leerstring 5 hinzufügen
    // ...
Grüße

EWeiss 7. Okt 2006 19:57

Re: Missing operator in verbindung mit ORD
 
Zitat:

Zitat von marabu
Hallo Emil,

als ich Beitrag #5 schrieb habe ich deinen Beitrag #4 noch nicht gekannt - alles wird klar:

Delphi-Quellcode:
begin
    // ...

    For IntI := 1 To Length(StrView) do // index läuft ab 1
    begin
      //  StrS := MidStr(StrView, IntI + 1, 1); // nicht nötig
      if StrView[IntI] <> ' '
        then IntX := IntX + BWidth[Ord(UpCase(StrView[IntI])) - 65]; // nicht () sondern []
        else Inc(IntI(5); //Bei Leerstring 5 hinzufügen
    // ...
Grüße

Danke das hat mir sehr geholfen.
werde es mal bei den anderen ebenfalls ändern und mal debuggen.

Wie immer Daumen hoch und Danke!
Wenns nicht klappt melde ich mich nochmal ;)

EDIT: Was so ne klammer doch ausmacht :-D

gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 Uhr.
Seite 2 von 3     12 3      

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