Listview drucken mit LazReport (sqlite)

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Listview drucken mit LazReport (sqlite)

Beitrag von Aphadias »

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?!?!?!

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Listview drucken mit LazReport (sqlite)

Beitrag von Michl »

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.
Dateianhänge
LazReport_Trunk.zip
(3.89 KiB) 97-mal heruntergeladen
LazReport_164.zip
(3.92 KiB) 80-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Re: Listview drucken mit LazReport (sqlite)

Beitrag von Aphadias »

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: 124
Registriert: Mi 28. Okt 2015, 18:28

Re: Listview drucken mit LazReport (sqlite)

Beitrag von Aphadias »

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

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Listview drucken mit LazReport (sqlite)

Beitrag von Michl »

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; 

Aphadias
Beiträge: 124
Registriert: Mi 28. Okt 2015, 18:28

Re: Listview drucken mit LazReport (sqlite)

Beitrag von Aphadias »

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?

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Listview drucken mit LazReport (sqlite)

Beitrag von Michl »

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; 

Antworten