AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Missing operator in verbindung mit ORD

Ein Thema von EWeiss · begonnen am 7. Okt 2006 · letzter Beitrag vom 8. Okt 2006
Antwort Antwort
Seite 1 von 3  1 23      
EWeiss
(Gast)

n/a Beiträge
 
#1

Missing operator in verbindung mit ORD

  Alt 7. Okt 2006, 18:50
Kleines Problem bei der umsetzung dieser zeile!

StrS : String;
IntX : Integer;
BWidth : Variant;

IntX := IntX + BWidth(ORD(UpperCase(StrS)) - 65);
Zitat:
[Pascal Error] frmGen.pas(205): E2066 Missing operator or semicolon
gruß
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Missing operator in verbindung mit ORD

  Alt 7. Okt 2006, 19:10
Hallo,

UpperCase liefert einen String zurück. Ord benötigt einen Char.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Missing operator in verbindung mit ORD

  Alt 7. Okt 2006, 19:12
Was ist BWidth? Eine Funktion? Wenn es was anderes ist, wird diese Syntax garantiert nicht funktionieren.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

Re: Missing operator in verbindung mit ORD

  Alt 7. Okt 2006, 19:25
Zitat von 3_of_8:
Was ist BWidth? Eine Funktion? Wenn es was anderes ist, wird diese Syntax garantiert nicht funktionieren.
BWidth : Variant;

Habe es aber neu definiert!

Delphi-Quellcode:
TSplitStrArray = array of String;
BWidth : TSplitStrArray;
gruß

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;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Missing operator in verbindung mit ORD

  Alt 7. Okt 2006, 19:32
Hallo Emil,

wenn ich deine gegebene Code-Zeile in etwas sinnvolles umforme, dann kommt das hier heraus:

 IntX := IntX + Ord(UpCase(StrS[1])) - 65; Aber vielleicht beschreibst du besser, was du eigentlich erreichen willst.

Grüße
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

Re: Missing operator in verbindung mit ORD

  Alt 7. Okt 2006, 19:38
Zitat von marabu:
Hallo Emil,

wenn ich deine gegebene Code-Zeile in etwas sinnvolles umforme, dann kommt das hier heraus:

 IntX := IntX + Ord(UpCase(StrS[1])) - 65; Aber vielleicht beschreibst du besser, was du eigentlich erreichen willst.

Grüße
Ich möchte den ASCII code ermitteln!
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:
VB: IntX = IntX + Int(BWidth(Asc(UCase(StrS)) - 65)
hoffentlich verstehst du was ich meine.

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ß
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Missing operator in verbindung mit ORD

  Alt 7. Okt 2006, 20:01
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).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: Missing operator in verbindung mit ORD

  Alt 7. Okt 2006, 20:02
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ß
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

Re: Missing operator in verbindung mit ORD

  Alt 7. Okt 2006, 20:04
Zitat von Christian Seehase:
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).
Verstehe ich nicht funktioniert in VB doch auch!
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!
Angehängte Dateien
Dateityp: rar gen_209.rar (40,4 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Missing operator in verbindung mit ORD

  Alt 7. Okt 2006, 20:08
Moin EWeiss,

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

ord(UpperCase(StrS[1])) schreiben.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  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 09:22 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