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;