Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#21

Re: Missing operator in verbindung mit ORD

  Alt 8. Okt 2006, 17:42
Irgendetwas stimmt mit der schleife oder dem Array StrView noch nicht.

Delphi-Quellcode:
function Tfrm_Gen.GetBitArray(StrView: String): Integer;
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 : Variant; //Resultat der gefundenen Buchstabenweiten Spliten
 PosX : Variant; //
 NewPos : Dword;
 StrS : String;
 IntX : Integer;

 begin
    IntPos := 0;
    IntDelPos := 0;
    ColFound := False;

    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, ',');

    //******************************** Bis hier stimmt alles *******************************\\

    IntX := 0;
    For IntI := 1 To Length(StrView) do
       begin
        // Wird benötigt zum Debuggen um den ASCII Wert als String anzuzeigen!
        StrS := MidStr(StrView, IntI , 1);
        // Übergebe Buchstabe abhängig vom aktiven Index
        If StrView[IntI] > ' Then
            begin
            IntX := IntX + BWidth[Ord(UpCase(StrView[IntI])) - 65];
            end Else
            //Bei Leerstring 5 hinzufügen
            IntX := IntX + 5;

        If StrView[IntI] > ' Then
        begin
            IntPos := PosX[Ord(UpCase(StrView[IntI])) - 65] - Int(BWidth[Ord(UpCase(StrView[IntI])) - 65]);
        end Else
            IntPos := 61;

        If (IntI > 1) And (StrView[IntI] > ' ') Then
        begin
            NewPos := IntX - BWidth[ORD(UpCase(StrView[IntI])) - 65];
        end Else If IntI = 1 Then
          NewPos := IntX - 6
        Else
          NewPos := IntX - 5;


        If StrView[IntI] > ' Then
        begin
            picTopTextSrc.Width := IntX;
            SetImage(picTopTextSrc, NewPos, 0, IntX, 7, picMap, IntPos, 88);
        end else
        begin
          picTopTextSrc.Width := IntX ;
          SetImage(picTopTextSrc, NewPos, 0, IntX, 7, picMap, IntPos, 4);
        end;
    end;
    Result := IntX + Length(StrView[IntI]) - 1;

End;
Es sollte eigentlich eine länge von 120 herauskommen abhängig vom übergebenen string
Resultat ist aber 115! Habs gescheckt keine ahnung warum.

Aufgerufen wird die Function mit

picTopText.Width := GetBitArray('Gen Bitmap Skin Test') + 14; Bis GEN wird angezeigt rest ist verschluckt Show Pic!

Gruß
  Mit Zitat antworten Zitat