Hi,
Please make sure to not use any runtime packages.
For the project set the destination project and always do a Build All after you changed the destination .
Julian
Hi,
Please make sure to not use any runtime packages.
For the project set the destination project and always do a Build All after you changed the destination .
Julian
The rotation flag can be modified by WPViewPDF for each single page.
I never saw that it would change the flag on its own - maybe you can send me your PDF file. Maybe the rotation flag is saved as reference, which would be quite unusual.
Each page can be rotated individually by 90 degrees angle.
You can use this command:
COMPDF_RotatePage = 492; // StrParam = page list, for example "1-2", (1 based)
// StrParam = page number, 1 based
// IntParam = Rotation value
// Rotation: ([1,2,3,4]-1)*90 or +- offset
// StrParam="selected" and StrParam="all" is also possible
Ich habe gerade die Wirksamkeit der Flags geprüft mit einer Datei mit vielen kleinen Tabellen. Es macht schon einen Unterschied.
Sie können die Testdatei mir auch gerne per e-mail zusenden.
IWPEditor und WPMemo sind fast gleich und sollten auch gleich funktionieren. Nach dem setzen des Flags ist allerdings ein neu formattieren erforderlich. Es macht also einen Unterschied, wann man das Flag setzt.
Welche Version setzen Sie genau ein?
Stimmt, ich hatte das T vergessen - s. Edit Vermerk.
Bitte diese formel verwenden:
1/sqrt(2)*1000
Um die Grösse zu prüfen kann man die PDF in einem datei viewer öffnen.
Hier steht dann die Grösse:
<< /Type /Page
/Parent 1 0 R
/MediaBox [ 0 0 422.592 597.678 ]
Die werte nach mediabox sind werte in pt, also 1 zoll / 72.
Thanks, I check that. Seems to be special behavior in tables.
This component will only be installed if the compiler symbol WPVIEW4 and DELPHIXE is defined in WPViewPDFINC.INC.
It uses the IDesigner interface, therefor it requires a newer Delphi edition.
Hallo,
wie setzen Sie wpfDontBreakTables?
Das selektive Abschalten des Umbruchs für eine Tabelle ist derzeit nicht möglich.
During the move to unicode this variable was forgotten:
FNameBuf: array[0..101] of Char;
But it cannot be changed to AnsiChar now since this will break all files saved with unicode compilers.
Hi, a positioned image cannot be handled as a character - they are internally handled completely differently.
The images are still added from left to right to the images of a page when found in a paragraph. This logic was not changed.
Images do not have a Z order relative to the text (or tables)
but there is a "behind text" flag which should not be set. See objmode property of the TWPTextObj
Seems to be a UNICODE thing. You can mail the file and I take a look
Zitatkann ich in einer vorhandenen PDF-Datei nachträglich die Seitengröße ändern?
Z.B. von DIN A5 auf DIN A 4
Ja, mit WPViewPDF PLUS geht das:
pdf.command(COMPDF_SaveScaledPDFMode, 4); // wpScalePerThousand
try
// Skaliere von DinA4 auf DinA5
pdf.command(COMPDF_SaveScaledPDFSetX, round(1/sqrt(2)*1000));
pdf.command(COMPDF_SaveScaledPDFSetY, round(1/sqrt(2)*1000));
pdf.Plus.SaveToFile(SaveDialog1.FileName);
finally
pdf.command(COMPDF_SaveScaledPDFMode, 0);
end;
Anmerkungen und Felder können nich komplett angepasst werden, u.U. ist dann die Schriftgrösse in Feldern zu gross.
ZitatEigentlich ist das, was ich da vorhabe, nur eine "Krampflösung" mit der Tabelle in der Tabelle, weil ich Probleme mit Tabellenzeilen mit fester Höhe habe!
Dort verhält sich das Editieren sehr merkwürdig und für den Benutzer nicht nachvollziehbar:
Solange man im verfügbaren Bereich tippt ist alles in Ordnung, kommen aber ein paar #10 Zeilenvorschübe und Text hinzu, bleibt der Cursor irgendwie am unteren Zellenrand, springt dann teilweise ein Zeichen zurück und selbst mit 'zig-fachem Del-Taste drücken bekommt man den unsichtbaren teil des Textes unten nicht wieder hoch! Auch de Cursortasten arbeiten dann in solch einem Text nicht mehr richtig!
Deswegen wollte ich eine Zelle, die keine Höhenbegrenzung hat, in solch eine höhenbegrenzte Zelle einfügen, da funktioniert die Editiererei nämlich so wie erwartet...
Wenn Sie in einer höhenbegrenzten Zelle mehr als möglich Text eingeben muss der Text irgendwann versteckt werden. Ich sehe hier keine Fehlfunktion.
ParentCell ist wie so dokumentiert:
Retrieve the reference to the cell the table which is parent to this cell is located in. If the cell is not in a nested table ParentCell will be nil.
Es handelt sich also bereits um die Zelle welche ihre unter Tabelle beinhaltet.
par := WPRichText1.ActiveParagraph.ParentCell;
if par=nil then raise Exception.Create('Nicht in Untertabelle');
htbl := par.ParentTable
ZitatWenn man sich in einer Zelle befindet kann man mit Cell auf diese Zelle zugreifen, ausserdem gibt es noch ParentRow und ParentTable.
Wenn Sie fragen zu einer Funktion haben, zögern Sie nicht bei gedrückter CTRL Taste in der IDE auf den Funktionsnamen zu klicken. Das bringt dann die Implementierung zum Vorschein, was oft Klarheit schafft.
verlässt alle unter absätze sodass man in dem obersten Level wiederfindet. Das wäre nach der Beschreibung die erste Tabelle, also das Tabellenobjekt, nicht die
Wenn man sich in einer Zelle befindet kann man mit Cell auf diese Zelle zugreifen, ausserdem gibt es noch ParentRow und ParentTable.
Dies sind alles Funktionen welche den ParagraphType abfragen.
Mit par := WPRichText1.ActiveParagraph.ParentTable; haben sie die aktuelle Tabelle, also evtl die Untertabelle bei Schachtelung.
Tip.: Untertabellen würde ich nur sehr sparsam verwenden und wenn es wirklich Sinn macht.
Thanks, this looks like good code.
I think if you do the loop backwards:
for I := Document.RTFData.count - 1 downto 0 do
you can delete the blocks also right away.
ZitatHabe ich aber einen Butten neben dem WPRichText welcher das Gleiche auslösen soll, ist ActiveParagraph falsch!
So habe ich es getestet und ActiveParagraph las in meinem Test immer noch den Text in der Tabellenzelle aus. (!)
ActiveParagraph ist auch nicht "falsch", es ist nur so, dass irgendwie in Ihrem Projekt die Position des Cursors geändert wird - bzw. der aktive Layer verlassen.
SetFocus setzt nicht unbedingt die cursor position.
OnLeaveRTFDataBlock wird normalerweise aufgerufen wenn durch einen Klick ein Layer (also Header/Footer/TextBox) verlassen wird. Wenn Sie den even abfangen und in dem Handler einen breakpoint plazieren, können Sie vermutlich anhand des Stacks herausfinden, wieso der wechsel stattfindet.
Andere Gelegenheiten für breakpoints finden sich in WPRTEDEFS.pas:
function TWPRTFDataCursor.MoveTo(paragraph: TParagraph ...)
procedure TWPRTFDataCursor.set_RTFData(x: TWPRTFDataBlock);