Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fastreport - automatisches "positionieren" eines memoviews (https://www.delphipraxis.net/114130-fastreport-automatisches-positionieren-eines-memoviews.html)

epex 20. Mai 2008 11:06


Fastreport - automatisches "positionieren" eines m
 
Hi, ich habe folgendes Problem mit Fastreport.
Ich habe z.B. eine Anschrift und erfasse in einer Datenbank Daten wie z.B. anrede, name, strasse und hausnummer, plz und ort sowie variable telefon nummern und email adressen.
Mein Problem is jetzt das ich folgendes Drucken möchte:
Anrede
Name
Titel
Zusatz
Strasse + Hnr
PLZ + Ort
tel 1
tel2
fax
handy
.....

usw

ist auch eigentlich kein Problem ABER (!!!!) wenn jetzt Tel1 oder zusatz oder titel wegfällt dann is da ne blöde unschöne lücke.
Frage: wie realisier ichs nun das die Felder unter der lücke "hochrutschen" ???

mfg Phil

RavenIV 20. Mai 2008 11:12

Re: Fastreport - automatisches "positionieren" ein
 
Du solltest uns mitteilen, welche Version von Fastreport Du verwendest.
Es gibt nämlich gravierende Unterschiede zwischen den einzelnen Versionen.

Union 20. Mai 2008 11:41

Re: Fastreport - automatisches "positionieren" ein
 
Bau doch das Memo mit frxMemoDaten.Lines.Add() zusammen oder schreib einen entsprechenden Ausdruck in das Memo zum Evaluieren.

epex 20. Mai 2008 12:12

Re: Fastreport - automatisches "positionieren" ein
 
@ravenIV
ich benutze fastreport in der version 4.0.11

@union
ja das hatte ich mir auch schon überlegt nur dachte ich das es einfacher geht (ne propertie oder sonst was) wo ich dann bestimmen kann das sich das memo auf das darüberstehende beziehen soll

Union 20. Mai 2008 12:32

Re: Fastreport - automatisches "positionieren" ein
 
Zitat:

ja das hatte ich mir auch schon überlegt nur dachte ich das es einfacher geht (ne propertie oder sonst was) wo ich dann bestimmen kann das sich das memo auf das darüberstehende beziehen soll
Leider gibt es kein Align = baTop. Die automatische Ausrichtung funktioniert nur mit baRight / baLeft in Verbindung mit AutoSize. Ich habe eine eher widerwärtige Lösung, ich gehe einfach die Werte von oben nach unten druch unt verschiebe alles ein Element nach oben, wenn leer (im Script-Event OnStartReport):
Delphi-Quellcode:
 
  if <qryLsAdrWE."NAME_2"> = '' then
  begin            
     qryLsAdrWEName_3.Top  := qryLsAdrWEName_3.Top-qryLsAdrWEName_3.Height;
     qryLsAdrWEName_4.Top  := qryLsAdrWEName_4.Top-qryLsAdrWEName_4.Height;
     qryLsAdrWEStrasse.Top := qryLsAdrWEStrasse.Top-qryLsAdrWEStrasse.Height;
     qryLsAdrWEStrasse2.Top := qryLsAdrWEStrasse2.Top-qryLsAdrWEStrasse2.Height;
     qryLsAdrWELand.Top    := qryLsAdrWELand.Top-qryLsAdrWELand.Height;
     qryLsAdrWEPlz.Top     := qryLsAdrWEPlz.Top-qryLsAdrWEPlz.Height;
     qryLsAdrWEOrt.Top     := qryLsAdrWEOrt.Top-qryLsAdrWEOrt.Height;
     qryLaendernamen.Top   := qryLaendernamen.Top-qryLaendernamen.Height;                                                                                                                
  end;                  

  if <qryLsAdrWE."NAME_3"> = '' then
  begin            
     qryLsAdrWEName_4.Top  := qryLsAdrWEName_4.Top-qryLsAdrWEName_4.Height;
     qryLsAdrWEStrasse.Top := qryLsAdrWEStrasse.Top-qryLsAdrWEStrasse.Height;
     qryLsAdrWEStrasse2.Top := qryLsAdrWEStrasse2.Top-qryLsAdrWEStrasse2.Height;
     qryLsAdrWELand.Top    := qryLsAdrWELand.Top-qryLsAdrWELand.Height;
     qryLsAdrWEPlz.Top     := qryLsAdrWEPlz.Top-qryLsAdrWEPlz.Height;
     qryLsAdrWEOrt.Top     := qryLsAdrWEOrt.Top-qryLsAdrWEOrt.Height;
     qryLaendernamen.Top   := qryLaendernamen.Top-qryLaendernamen.Height;                                                                                                                
  end;
Das ginge mittels eines Arrays bestimmt noch eleganter.

RavenIV 20. Mai 2008 12:32

Re: Fastreport - automatisches "positionieren" ein
 
Zitat:

Zitat von epex
ja das hatte ich mir auch schon überlegt nur dachte ich das es einfacher geht (ne propertie oder sonst was) wo ich dann bestimmen kann das sich das memo auf das darüberstehende beziehen soll

Es gibt doch Ereignisse wie z.B. OnBeforePrint.
Damit kann man per "Code" im Report beeinflussen, was passieren soll.
Hier kannst Du dann bestimmen, dass wenn LabelVorname leer ist, dann LabelName um x Pixel nach oben gesetzt wird.

Union 20. Mai 2008 12:34

Re: Fastreport - automatisches "positionieren" ein
 
Kein Roter Kasten?

alzaimar 20. Mai 2008 13:11

Re: Fastreport - automatisches "positionieren" ein
 
Äh, wieso konkatenierst Du die einzelnen Zeilen nicht, wobei Du nur nichtleere Zeilen addierst?

Delphi-Quellcode:
Procedure AddNonEmpty (aLines : TStrings; Const aLine : String);
Begin
  If Trim (aLine)<>'' Then aALines.Add(aLine);
End;
Und schreibst dann 'aLines.Text' in eine TfrxMemo?

epex 20. Mai 2008 14:07

Re: Fastreport - automatisches "positionieren" ein
 
so habs gelöst ^^
hab mir jetzt einfach nen richview genommen das ganze stretchable gemacht frag jetzt den wert inner DB ab über length() und wenns grösser 0 is dann wird halt ne line im richview geaddet ... jetzt isses nur noch interessant zu wissen wie ich die einzelnen lines formatieren kann

aber ansonnsten läufts soweit. danke für eure bemühungen :)

mfg Phil

*edit*
@union
was meintest du mit roter kasten ?

alzaimar 21. Mai 2008 07:03

Re: Fastreport - automatisches "positionieren" ein
 
Also wie die einzelnen lines formatted werden können, kannst Du mit Word / Wordpad outbecomen. You muss einfach das program starten, ein paar lines adden und nach deinen Requirements formatten und als RTF saven. Dann loadest Du das RTF-file und looks einfach, what das program draus gedoo'd haben. Mit ein wenig phantasy pastest Du dann die RTF-fragments simply in dein code.

Ick finde aber, dat denglish no outpress von professionalism is, sondern eher von lack of eigene languagekenntnisse. Ick woorde meer dat abgevoughnen, da dat weerglesh beschoyard kleanged.

Howdy.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:05 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz