Witam,
Piszę dość spory program (dochodzi do 5000 linijek kodu) i natrafiłem właśnie na kilka problemów. Jednym z nich jest błąd w deklaracji klasy, która będzie przechowywała dane. Program służy do automatycznego tworzenia ASCII Artów z obrazów. Do dobierania znaku będę stosował coś w rodzaju mechanizmu OCR. Te struktury i klasy będą zawierać przetworzone na grafikę wybrane znaki z danej czcionki.
Poniższy kod nie kompiluje się. Błąd pojawia się odnośnie linijek oznaczonych "problem". Treść błędu "Record, object or class type required", czyli wg. mnie kompilator nie poznaje że to bitmapa, albo źle odniosłem się do tej wartości. Wiecie może jak to poprawić?
type //Struktura bajtu wraz z opisem w postaci znaku
TByteAndChar = record
Wartosc : Byte;
Nazwa : Char;
end;
type //Struktura l. calkowitej wraz z opisem w postaci znaku
TIntAndChar = record
Wartosc : Integer;
Nazwa : Char;
end;
type //Struktura l. rzeczywistej wraz z opisem w postaci znaku
TRealAndChar = record
Wartosc : Real;
Nazwa : Char;
end;
type //Klasa znaku przeanalizowanego i zapisanego jako grafika
TZnakGfxInfo = class
private
ZnakID : TByteAndChar; //Struktura przecohuwaca nazwe znaku i jego ID
public
ObrazZnak : TBitmap; //Obraz znaku
ObrazZnakKrawedz : TBitmap; //Obraz krawędzi znaku (polowa rozdzielczosci oryginalu)
ObrazZnakRozmyty : TBitmap; //Obraz znaku po addytywnym rozmyciu Guassowskim (obraz oryginalu)
SumyRGB : array[0..2, 0..2] of Integer; //Sumy RGB w 9 obszarach znaku
property ID : byte read ZnakID.Wartosc write ZnakID.Wartosc default 0; //Domyslna wartosc to NUL 000
property Nazwa : char read ZnakID.Nazwa write ZnakID.Nazwa default Chr(0);
property SzerokoscX : Integer read ObrazZnak.Width default 0; //Problem
property WysokoscY : Integer read ObrazZnak.Height default 0; //Problem
end;
type //Klasa czcionki przeanalizowanej i zapisanej jako grafika
TCzcionkaGfxInfo = class
private
ZnakiKrawedzie : array of TIntAndChar; //Dynamiczna tablica zawierajaca liczbe krawedzi w znakach, posortowana rosnaco
ZnakiGradient : array of TRealAndChar; //Dynamiczna tablica zawierajaca % miejsca zajmowanego przez znaki, posortowana rosnaco
Znaki : array of TZnakGfxInfo; //Dynamicznej wielkosci tablica znakow przekonwertowanych
LZnakow : byte; //Liczba przekonwertowanych znakow
public
Czcionka : TFont; //Czcionka która zostala przekonwetrowana
ZnakMDolny,ZnakMBoczny : bool; //Informacja czy dodano dolny i boczny margines do znaków
ZnakX,ZnakY : integer; //Wymiary znaku
property LiczbaZnakow : byte read LZnakow;
end;
Druga sprawa. Pojawił się problem z czytelnością kodu. Mam wiele okien aplikacji, a na jednym z nich znajduje się ListBox Logu. Obsługa logu jest potrzebna z każdego okna, więc musiałem wkleić kod odpowiedzialny za nią do kilku plików. Nie można go wstawić do DLL-a bo odnosi się on do konkretnego obiektu - ListBoxa na głównej formatce. Czy jest jakiś sposób by dołączyć fragment kodu z pliku i mieć go tylko w jednej kopii dla łatwej edycji?
Zdaję sobie sprawę że być może robię coś po Chińsku... z tym że to mój pierwszy projekt w Delphi. Najbardziej mnie wnerwia że zdecydowałem się na polskie nazwy własnych procedur, zmiennych, funkcji itp. Szerokosc := Width wygląda fatalne :/ Nie polecam. :)
Dziękuję za pomoc.