![]() |
Re: Missing operator in verbindung mit ORD
Irgendetwas stimmt mit der schleife oder dem Array StrView noch nicht.
Delphi-Quellcode:
Es sollte eigentlich eine länge von 120 herauskommen abhängig vom übergebenen string
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; Resultat ist aber 115! Habs gescheckt keine ahnung warum. Aufgerufen wird die Function mit
Delphi-Quellcode:
Bis GEN wird angezeigt rest ist verschluckt :( Show Pic!
picTopText.Width := GetBitArray('Gen Bitmap Skin Test') + 14;
Gruß |
Re: Missing operator in verbindung mit ORD
Ok hat sich erledigt!
Result = 115 wurde deshalb ausgegeben weil ich bedingt durch ORD[]
Delphi-Quellcode:
mit den zähler IntI := 1 anfagen mußte.
For IntI := 1 To Length(StrView) do
So geht es nun..
Delphi-Quellcode:
Bleibt noch eine Frage offen.
For IntI := 1 To Length(StrView) + 1 do
Delphi-Quellcode:
Hier wird die picTopTextSrc.Width nicht neugesetzt!
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; 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. |
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