Witam
Jeden problem rozwiązany ale pojawiły się 2 ;) kolejne:
- W istocie problem był tam gdzie wskazałeś. Teraz wszystko działa ok, przy generowaniu raportu. Niemniej jednak korzystam także z Cairo do generowania pdfów i tutaj pojawia się problem. Mianowicie w pliku raportu mam osadzone 4 grafiki. Tyle ich może maks. w nim występować. Może ale nie musi, bo równie dobrze dla danego raportu może w ogóle nie być zdjęć. Przed "wysłaniem" zdjęcia do raportu program sprawdza czy dany plik jpg istnieje. Jeśli tak - "wysyła" go, jeśli nie - nic się nie dzieje (w raporcie wówczas jest brak jpga w "przeznaczonej" dla niego grafice). Niemniej jednak dla Cairo stanowi to problem, gdyż jeśli są wszystkie pliki jpg na jakie jest "miejsce" w raporcie, to problemu nie ma, ale jeśli choć jedna grafika w raporcie nie została "obsadzona" (brak dla niej przeznaczonego pliku jpg) to przy generowaniu pdfa program wyrzuca błąd:
Access violation.
Press OK to ignore and risk data corruption.
Press Cancel to kill the program.
Plik pdf co prawda się generuje, ale jest uszkodzony (pojemność 0 bajtów) i nie daje się otworzyć.
Da się to jakoś poprawić?
- W programie generuję także drugi raport, na podstawie danych ze StringGrida. Dla OnGetValue w jego komponencie (Report2) jest przypisana procedura:
procedure TfOknoProgramu.frReport2GetValue(const ParName: String;
var ParValue: Variant);
begin
if ParName='id' then
ParValue:=StringGrid1.Cells[0, lp];
if ParName='stan' then
ParValue:=StringGrid1.Cells[1, lp];
if ParName='producent' then
ParValue:=StringGrid1.Cells[3, lp];
if ParName='typ' then
ParValue:=StringGrid1.Cells[4, lp];
if ParName='wykonanie' then
ParValue:=StringGrid1.Cells[5, lp];
if ParName='moc_znam' then
ParValue:=StringGrid1.Cells[6, lp];
if ParName='nap_gn' then
ParValue:=StringGrid1.Cells[7, lp];
if ParName='nap_dn' then
ParValue:=StringGrid1.Cells[9, lp];
if ParName='wyposazenie' then
ParValue:=StringGrid1.Cells[22, lp];
end;
Dla powiązanego z nim komponentu UserDataset mam procedury:
procedure TfOknoProgramu.frUserDataset1CheckEOF(Sender: TObject;
var Eof: Boolean);
begin
eof:=lp>StringGrid1.RowCount-1;
end;
procedure TfOknoProgramu.frUserDataset1First(Sender: TObject);
begin
lp:=1;
end;
procedure TfOknoProgramu.frUserDataset1Next(Sender: TObject);
begin
Inc(lp);
end;
W StringGridzie nie ma nigdzie ścieżki do pliku jpg który chciałbym także osadzić w tym raporcie. Dany plik jpg ma natomiast zawsze w nazwie unikalny identyfikator danego wiersza ze StringGrida (komórka o adresie: StringGrid1.cells[0, wiersz]) i po nim chciałbym go przypisywać. Np wiersz ma id=12, a plik jpg ma nazwę foto_id_12_nr_1.jpg
Podobnie jak w przypadku 1, plik jpg może występować ale nie musi (problem przy generowaniu pdfa przez Cairo).
Jak ugryźć ten temat?