Delphi-PRAXiS
Seite 3 von 3     123   

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)

EWeiss 8. Okt 2006 16:42

Re: Missing operator in verbindung mit ORD
 
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

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

Gruß

EWeiss 8. Okt 2006 19:51

Re: Missing operator in verbindung mit ORD
 
Ok hat sich erledigt!

Result = 115 wurde deshalb ausgegeben weil ich bedingt durch ORD[]

Delphi-Quellcode:
For IntI := 1 To Length(StrView) do
mit den zähler IntI := 1 anfagen mußte.

So geht es nun..
Delphi-Quellcode:
For IntI := 1 To Length(StrView) + 1 do
Bleibt noch eine Frage offen.

Delphi-Quellcode:
        If StrView[IntI] > ' ' Then
        begin
            // neue picTopTextSrc weite zuweisen abhängig von
            // der aktuellen gesamtweite(IntX)
            picTopTextSrc.Width := IntX;
            SetImage(picTopTextSrc, NewPos, 0, IntX, 7, picMap, IntPos, 88);
        end else
        begin
          // Bei Leerstring wird andere Y Position benötigt
          picTopTextSrc.Width := IntX;
          SetImage(picTopTextSrc, NewPos, 0, IntX, 7, picMap, IntPos, 4);
        end;
Hier wird die picTopTextSrc.Width nicht neugesetzt!
Obwohl so wie man sehen kann diese sich auf die neue weite IntX setzen sollte.
Jetzt sag mir mal jemand was das denn nun wieder für ein Problem ist!

Der Schriftzug wird nur korrekt angezeigt wenn ich vorher die weite in der Form setze
aber das kann es ja wohl nicht sein.

gruß


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

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