![]() |
Missing operator in verbindung mit ORD
Kleines Problem bei der umsetzung dieser zeile!
StrS : String; IntX : Integer; BWidth : Variant;
Delphi-Quellcode:
IntX := IntX + BWidth(ORD(UpperCase(StrS)) - 65);
Zitat:
|
Re: Missing operator in verbindung mit ORD
Hallo,
UpperCase liefert einen String zurück. Ord benötigt einen Char. Gruß xaromz |
Re: Missing operator in verbindung mit ORD
Was ist BWidth? Eine Funktion? Wenn es was anderes ist, wird diese Syntax garantiert nicht funktionieren.
|
Re: Missing operator in verbindung mit ORD
Zitat:
Habe es aber neu definiert!
Delphi-Quellcode:
gruß
TSplitStrArray = array of String;
BWidth : TSplitStrArray; Edit: hier mal die ganze Function!
Delphi-Quellcode:
function Tfrm_Gen.GetBitArray(StrView: String): Single;
Var IntI : Integer; //Zähler StrPosX : String; //X Position im Bitmap StrPosW : String; //Weite des Buchstaben IntPos : Dword; //Zähler für die Buchstabenweite DelemiterCol : TCOLOR; //Delemiter als Farbe IntDelPos : Integer; //Aktuelle Delemiter Position ColFound : Boolean; //Farbe gefunden, ergebnis = Buchstabenweite BWidth : TSplitStrArray; //Resultat der gefundenen Buchstabenweiten Spliten PosX : Variant; // NewPos : Dword; StrS : String; IntX : Integer; begin IntPos := 0; IntX := 0; IntDelPos := 0; ColFound := False; NewPos := 0; PicMapDC := PicMap.Picture.Bitmap.Canvas.Handle; //******************** Schleife zum ermitteln der Buchstabenweite ********************* /////////////////////////////////////////////////////////////////////////////////////// //Ermitteln der Delemiter Farbe DelemiterCol := GetPixel(PicMapDC, 0, 88); //Schleife durchlaufen bis 26* die Delemiter Farbe gefunden wurde For IntI := 1 To picMap.Width do begin //Raus hier wenn Farbe 26* gefunden If IntDelPos = 26 Then Break; //Aktuelle Position der Buchstabenweite um eins erhöhen inc(IntPos); //Wenn aktuelle position im Bitmap die gleiche Farbe //enthält wie DelemiterCol .. If GetPixel(PicMapDC, IntI, 88) = DelemiterCol Then begin If IntDelPos <= 24 Then begin //Position zum StrPosX addieren und Delemiter komma anhängen StrPosX := StrPosX + IntToStr(IntI) + ','; end Else //Letze Position zum StrPosX addieren ohne Delemiter StrPosX := StrPosX + IntToStr(IntI); //Zähler für Farbe um eins erhöhen inc(IntDelPos); //Farbe gefunden ColFound := True; End; //wenn Farbe gefunden If ColFound Then begin //weite des Buchstaben zum StrPosW addieren If IntDelPos <= 25 Then begin StrPosW := StrPosW + IntToStr(IntPos - 1) + ','; end Else StrPosW := StrPosW + IntToStr(IntPos - 1); //Buchstabenweite löschen IntPos := 0; End; //Farbe gefunden zurück setzen ColFound := False; end; BWidth := Split(StrPosW, ','); PosX := Split(StrPosX, ','); For IntI := 0 To Length(StrView) do begin StrS := MidStr(StrView, IntI + 1, 1); If StrS > ' ' Then begin // IntX := IntX + BWidth(ORD(UpperCase(StrS)) - 65); end Else //Bei Leerstring 5 hinzufügen IntX := IntX + 5; If StrS > ' ' Then begin // IntPos := PosX(ORD(UpperCase(StrS)) - 65) - BWidth(ORD(UpperCase(StrS)) - 65); end Else IntPos := 61; If (IntI > 0) And (StrS > ' ') Then begin // NewPos := IntX - BWidth(ORD(UpperCase(StrS)) - 65); end Else If IntI = 0 Then NewPos := IntX - 6 Else NewPos := IntX - 5; If StrS > ' ' Then begin picTopTextSrc.Width := (IntX * 15); SetImage(picTopTextSrc, NewPos, 0, IntX, 7, picMap, IntPos, 88); end Else picTopTextSrc.Width := IntX * 15; SetImage(picTopTextSrc, NewPos, 0, IntX, 7, picMap, IntPos, 4); end; GetBitArray := IntX + Length(StrS) - 1; End; |
Re: Missing operator in verbindung mit ORD
Hallo Emil,
wenn ich deine gegebene Code-Zeile in etwas sinnvolles umforme, dann kommt das hier heraus:
Delphi-Quellcode:
Aber vielleicht beschreibst du besser, was du eigentlich erreichen willst.
IntX := IntX + Ord(UpCase(StrS[1])) - 65;
Grüße |
Re: Missing operator in verbindung mit ORD
Zitat:
Beispiel UpperCase ist ein Großbuchstabe "B" davon den asc(wert - 65) welcher zu IntX addiert werden soll. BWidth ist die weite des Buchstaben der oben im Quelltext ermittelt wird!
Code:
hoffentlich verstehst du was ich meine.
VB: IntX = IntX + Int(BWidth(Asc(UCase(StrS)) - 65)
EDIT: Die abfrage ist richtig konnte aber für Asc in Delphi nur ORD ausfindig machen. Da gibt es aber leider das oben gezeigte problem. gruß |
Re: Missing operator in verbindung mit ORD
Moin EWeiss,
Du kannst nur nicht aus einem String einen ASCII-Code ermitteln, sondern musst Dich schon für ein Zeichen entscheiden (wie wäre wohl der ASCII-Code von 'ABCDE'? ;-)), indem Du den Index des gewünschten Zeichens angibst (siehe Marabus Beitrag). |
Re: Missing operator in verbindung mit ORD
Also dachte eigentlich der Code mit den Kommentierten Zeilen erklärt das von sich aus.
Ich habe ein Bitmap! In diesen befindet sich ein Strip bestehend aus Buchstaben 24 an der zahl. Die koordinaten der Buchstaben im strip sind in der höhe gleich können aber in der weite unterschiedlich sein. Vor und hinter den Buchstaben befindet sich immer die gleiche Farbe! Mit dieser Farbe wird der Strip gescannt das ASCII Zeichen ermittelt und die weite abhängig von der Farbe. Das ganze wird in ein String Array addiert. Welches nachher abhängig vom übergebenen Text auseinander genommen und in richtiger Reihenfolge wieder zusammen gefügt wird. Dabei wird das Zeichen sowie die weite des gemalten Buchstaben berücksichtig. gruß |
Re: Missing operator in verbindung mit ORD
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich mache nichts anderes als den code von meinen MediaPlayer in Delphi zu übersetzen. Und der läuft. ;) Das geht nicht weil sich das zeichen in einem String Array befindet! Kann es nicht so machen wie marabu es beschrieben hat. gruß Hier ein Test! |
Re: Missing operator in verbindung mit ORD
Moin EWeiss,
Zitat:
Delphi-Quellcode:
schreiben.
ord(UpperCase(StrS[1]))
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 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