Listview drucken mit LazReport (sqlite)

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

Listview drucken mit LazReport (sqlite)

Beitragvon Aphadias » 9. Jun 2017, 14:27 Listview drucken mit LazReport (sqlite)

moin gesagt..

ich tüfftel schon seit ein paar Tagen rum und renne irgend wie im Kreis. Ich habe eine ListView1 die ich gerne Ausdrucken möchte. Aktuell hat die mehrere Spalten aber ich probiere es erst mal nur mit der 1. Spalte die alle Namen beinhaltet und unterschiedlich lang sein kann.

im Lazreport ist ein Feld mit der Variablen [name] angelegt (damals bei MySql ging es ganz leicht und er hatte alles untereinander aufgelistet)... problem hier ist ermal... wenn ich es mal schaffe das in [name] ein Name steht dann nur einer und es werden automatisch mehrere Seiten angelegt und auf jeder Seite steht ein Name und das ist der gleiche :?

Aktuell sieht mein Quelltext so aus: (ich weiß das der Falsch ist ^^)

Code: Alles auswählen
procedure TFmedi.frReport1GetValue(const ParName: String; var ParValue: Variant);
var i:Integer;
  name:string;
  name2:String;
begin
    if ParName = 'name' then
    begin
      for i:=0 to ListView1.Items.Count-1 do
          begin
            name:= ListView1.Items[i].SubItems[0];
            name2:=name2+name
 
          end;
 
      ParValue := name2;//ListView1.Selected.SubItems[0];
 
    end;
 
 
end;
 
procedure TFmedi.frUserDataset1CheckEOF(Sender: TObject; var Eof: Boolean);
begin
     Eof := FRow > ListView1.ItemIndex - 1;
end;
 
procedure TFmedi.frUserDataset1First(Sender: TObject);
begin
    FRow := 1;
end;
 
procedure TFmedi.frUserDataset1Next(Sender: TObject);
begin
  Inc(FRow);
end;


Ich habe den schon x mal umgeschrieben... entweder der schreibt nix rein oder mehrere Seiten mit dem gleichen Namen :cry: Ach ja aktuell schreibt er nur ein Namen wenn ich vorher die ListView angeklickt habe?!?!?!
Aphadias
 
Beiträge: 87
Registriert: 28. Okt 2015, 18:28

Beitragvon Michl » 9. Jun 2017, 20:43 Re: Listview drucken mit LazReport (sqlite)

Habe zwar noch nie ein TfrUserDataset genutzt, geht aber tiptop hier. Wieder was gelernt. Danke!

Der Code sieht bei mir so aus:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
  Report.DesignReport;
  Report.ShowReport;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  ReportFile: String;
begin
  ReportFile := GetCurrentDir + PathDelim + 'test.lrf';
  if FileExists(ReportFile) then
    Report.LoadFromFile(ReportFile);
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
  Report.ShowReport;
end;
 
procedure TForm1.frUserDataset1CheckEOF(Sender: TObject; var Eof: Boolean);
begin
  Eof := FRow = ListView1.Items.Count;
end;
 
procedure TForm1.frUserDataset1First(Sender: TObject);
begin
  FRow := 0;
end;
 
procedure TForm1.frUserDataset1Next(Sender: TObject);
begin
  Inc(FRow);
end;
 
procedure TForm1.ReportGetValue(const ParName: String; var ParValue: Variant);
var
  ListItem: TListItem;
  i: Integer;
begin
  case ParName of
    'Item0':
    begin
      ListItem := ListView1.Items[FRow];
      ParValue := ListItem.Caption;
      for i := 0 to ListItem.SubItems.Count - 1 do
        ParValue := ParValue + ' ' + ListItem.SubItems[i];
    end;
  end;
end;   

Da ich normal unter Lazarus Trunk arbeite, hatte ich das Projekt damit erstellt. Allerdings hat Lazarus 1.6.4 Probleme mit dem Report (scheint nicht abwärtskompatible zu sein). Habe daher beide Testprojekte angefügt. Vielleicht hilft es dir ja als Anregung.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2169
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon Aphadias » 11. Jun 2017, 09:00 Re: Listview drucken mit LazReport (sqlite)

danke schaue ich mir gleich mal an ^^

aber trotzdem noch eine kurze zwischen frage... was ist lazarus trunk? habe ich noch nie gehört... im quelltext sah es jetzt eigentlich gleich aus nur das er bei trunk rumgemeckert hat beim laden...
Aphadias
 
Beiträge: 87
Registriert: 28. Okt 2015, 18:28

Beitragvon Aphadias » 11. Jun 2017, 09:54 Re: Listview drucken mit LazReport (sqlite)

sry für doppelpost.... aber bekomme doch eben echt nen FÖN

also erst mal wenn ich mir so den Quelltext von dir anschaue könnte ich mit dem Kopf auf den Tisch schlagen... hätte ich auch fast selbst drauf kommen :roll:

ok aber wieso ich gerade ein FÖN bekomme ist das er bei mir beim CASE nen Fehler raus schmeißt und ich weiß nicht warum... es ist genau so wie in deinem Beispiel was du mir geschickt hast... mittlerweile habe ich es rüber kopiert um den Fehler zu finden.... und ich sehe wohl den Wald vor lauter Bäume nicht...

der kreidet mir das of und hinterm String das : an mit der Begründung: medi.pas(293,16) Error: Ordinal or string expression expected
medi.pas(294,11) Error: Constant and CASE types do not match
medi.pas(294,11) Error: Ordinal expression expected

verstehe ich nicht warum ich das Problem habe aber du nicht....

EDIT:
egal habe es jetzt einfach in IF gepackt... schreibe ich zwar mehr aber es funktioniert wenigstens und ich kann mich erst mal abreagieren... trotzdem danke... mit case probiere ich dann noch mal
Aphadias
 
Beiträge: 87
Registriert: 28. Okt 2015, 18:28

Beitragvon Michl » 12. Jun 2017, 08:56 Re: Listview drucken mit LazReport (sqlite)

Aphadias hat geschrieben:der kreidet mir das of und hinterm String das : an mit der Begründung: medi.pas(293,16) Error: Ordinal or string expression expected
medi.pas(294,11) Error: Constant and CASE types do not match
medi.pas(294,11) Error: Ordinal expression expected

verstehe ich nicht warum ich das Problem habe aber du nicht....

Vermutlich hast du ein anderen Build-Modus. Z.B. Modus "Delphi" kann damit nicht umgehen:
Code: Alles auswählen
{$mode objfpc}{$H+}
// vs.
{$mode delphi}     
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2169
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon Aphadias » 13. Jun 2017, 15:41 Re: Listview drucken mit LazReport (sqlite)

ja das stimmt... wusste gar nicht das es verschiedene mode gibt... habe delphi drinne... was für modes gibt es denn? und habe andere andere nachteile?

kann ich den mode oben einfach umschreiben?
Aphadias
 
Beiträge: 87
Registriert: 28. Okt 2015, 18:28

Beitragvon Michl » 13. Jun 2017, 17:36 Re: Listview drucken mit LazReport (sqlite)

Aphadias hat geschrieben:kann ich den mode oben einfach umschreiben?
Ja.

Aphadias hat geschrieben:was für modes gibt es denn?
Die FreePascal-Doku ist recht gut. Siehe https://www.freepascal.org/docs-html/prog/progap4.html#progse75.html
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2169
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

• Themenende •

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried