Otóż mam taki problem. Umyśliłem sobie napisać edytorek "czcionek" do zabawki zwanej MegaZeux (ten wbudowany jest fatalny, szczególnie jeśli chodzi o SMZX).
Wszystko niby w porządku, no ale jednak jest problem.
Otóż mam 1-wymiarowy bufor znaków zadeklarowany w ten sposób:
type
TCharArr = Array[0..3,0..13] of byte;
TCharset = Array[0..255] of TCharArr;
TCharArr jest "właściwym" znakiem. Zrobiłem tak, żeby mi było łatwiej rysowanie znaków napisać (zmapować tablicę 2d na inną tablicę 2d jest łatwiej). Samo rysowanie odbywa się na drawgridach.
Tu jest moja funkcja rysująca podgląd znaków w "charsecie" na draw gridzie:
procedure Tmain.charsetgridDrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
var x,y:byte;
realx,realy:LongInt;
begin
x:=0;
y:=0;
realx:=aRect.Left+10;
realy:=aRect.Top+4;
//clearing character cell
charsetgrid.Canvas.Brush.Color:=clWhite;
charsetgrid.Canvas.FillRect(aRect);
for x:=0 to 3 do begin
for y:=0 to 13 do begin
charsetgrid.Canvas.Font.Color:=clBlue;
charsetgrid.Canvas.Brush.Color:=Colores[Charset[aCol+aRow][x][y]];
charsetgrid.Canvas.FillRect(realx+x,realy+y,realx+x+2,realy+y+2);
charsetgrid.Canvas.TextOut(realx,realy,IntToStr(acol*arow));//Charset[aCol+aRow][x][y]
end;
end;
end;
Niestety po dodaniu rysowania tekstu na poszczególnych komórkach okazało się, że mapuje je conajmniej... dziwnie. Przy acol*arow:
Przy acol+arow:
Acol+arow bliżej prawdy do tego co ja bym chciał, ale ciągle nie to. Ja potrzebuję, żeby to szło
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
etc., aż do 255. Skończyły mi się pomysły jak to poprawnie zaimplementować. Pomożecie?
//edit: Dlaczego zawsze tak musi być że jak założę temat to rozwiązanie samo mi wpada do głowy?