TPDFlibFormSession
Formlar, etkileşim, veri türleri
Açıklama
Bir GUI çerçevesine dayanmadan AcroForm isabet testini, klavye gezinmesini, odağı, düzenleme değerini ve metin seçim durumunu sürdürür
Bağlı TPDFlib örneği çağıranın mülkiyetinde kalır ve oturumdan uzun yaşamak zorundadır
Odak geçişleri widget /Fo ve /Bl eylemlerini, türlendirilmiş ana makine geri çağrımları olarak OnAction üzerinden açığa çıkarır
Sayfa dikdörtgenleri sayfa döndürmesinden sonraki görsel CropBox'ı, kitaplığın geçerli ölçü birimleriyle kullanır; başlangıç noktası görsel sol üst köşededir
Yönlü seçimler bağımsız çapa ve imleç konumlarını saklar ve UTF-16 kod birimleri, Unicode kod noktaları veya genişletilmiş grafem kümeleriyle ayarlanabilir ya da sorgulanabilir
İki yönlü düzenlemeler mantıksal alan değeri sırasını korurken gömme düzeylerinden satır başına görsel imleç yuvalarını çözer; böylece fiziksel Sol ve Sağ hareketi, soldan sağa ile sağdan sola karışık metni izler
Seçim değiştirmeleri /K'yı ana makineye gönderir, seçilen ve ikame metni OnTextEdit üzerinden açığa çıkarır, tam grafem sınırlarında /MaxLen'i uygular ve kabul edilen bir düzenlemeden sonra seçimi daraltır
Her etkin düzenleme, form eylemlerini veya ana makine düzenleme geri çağrımlarını yeniden göndermeden geçici değeri, görüntülenen değeri ve yönlü seçimi onaran sınırlı bir fark geçmişi tutar
DispatchInputEvent; platformdan bağımsız işaretçi, tekerlek, adlandırılmış tuş ve birleştirilmiş metin kayıtlarını kısıtlı widget eylemlerine, odak geçişlerine, grafem güvenli düzenlemeye, düğme etkinleştirmeye ve seçim alanı gezinmesine dönüştürür
Oturum girilen ve basılı widget kimliğini saklar; böylece /E, /X, /D ve /U, işaretçi yakalama ve iptali aşsa bile PDF tetikleyici sıralamasını izler
İşlemeler /V ve /F eylemlerini gönderir, belgeyi değiştirmeden önce desteklenen sınırlı JavaScript alt kümesini yürütür ve doğrulama, biçimlendirme veya bir ana makine geri çağrımı işlemi reddettiğinde etkin düzenlemeyi tutar
Doğrulanmış ham değer alana saklanırken DisplayValue ile üretilen widget görünümü biçimlendirme sonucunu korur
Bildirim
type
TPDFlibFormFieldIndices = array of Integer;
TPDFlibFormSelectionUnit = (fsuUTF16CodeUnit,
fsuUnicodeCodePoint, fsuGraphemeCluster);
TPDFlibFormTextDirection = (ftdAuto,
ftdLeftToRight, ftdRightToLeft);
TPDFlibFormCaretIndices = array of Integer;
TPDFlibFormSelection = record
IndexUnit: TPDFlibFormSelectionUnit;
AnchorIndex: Integer;
CaretIndex: Integer;
StartIndex: Integer;
SelectionLength: Integer;
IsReversed: Boolean;
end;
TPDFlibFormSessionActionEvent = procedure(Sender: TObject;
FieldIndex: Integer; const TriggerEvent: AnsiString;
const ActionInfo: TPDFlibActionInfo; var Allow: Boolean) of object;
TPDFlibFormSessionFocusEvent = procedure(Sender: TObject;
OldFieldIndex, NewFieldIndex: Integer) of object;
TPDFlibFormSessionValueEvent = procedure(Sender: TObject;
FieldIndex: Integer; const OldValue, NewValue: WideString) of object;
TPDFlibFormEditKind = (fekReplaceSelection,
fekCutSelection, fekPasteText);
TPDFlibFormSessionTextEditEvent = procedure(Sender: TObject;
FieldIndex: Integer; EditKind: TPDFlibFormEditKind;
SelectionStart, SelectionLength: Integer;
const SelectedText: WideString; var ReplacementText: WideString;
var Allow: Boolean) of object;
TPDFlibFormInputEventKind = (fiekPointerMove,
fiekPointerDown, fiekPointerUp, fiekPointerDoubleClick,
fiekPointerLeave, fiekPointerCancel, fiekWheel,
fiekKeyDown, fiekKeyUp, fiekTextInput);
TPDFlibFormInputModifiers = set of TPDFlibFormInputModifier;
TPDFlibFormInputEvent = record
Kind: TPDFlibFormInputEventKind;
Modifiers: TPDFlibFormInputModifiers;
Button: TPDFlibFormInputButton;
Key: TPDFlibFormInputKey;
Page: Integer;
X, Y: Double;
WheelDeltaX, WheelDeltaY: Double;
Text: WideString;
end;
TPDFlibFormSession = class
public
constructor Create(ALibrary: TPDFlib);
procedure AttachLibrary(ALibrary: TPDFlib);
procedure Reset;
function FocusField(FieldIndex: Integer;
CommitCurrent: Boolean = True): Integer;
function GetFieldPageRect(FieldIndex: Integer; out Page: Integer;
out Left, Top, Width, Height: Double): Integer;
function HitTest(Page: Integer; X, Y: Double): Integer;
function GetTabSequence(out FieldIndices: TPDFlibFormFieldIndices): Integer;
function FocusAt(Page: Integer; X, Y: Double;
CommitCurrent: Boolean = True): Integer;
function FocusNext(Backwards: Boolean = False;
WrapAround: Boolean = True; CommitCurrent: Boolean = True): Integer;
function Blur(CommitCurrent: Boolean = True): Integer;
function BeginEdit(FieldIndex: Integer): Integer;
function SetEditValue(const NewValue: WideString): Integer;
function SetSelection(StartIndex, SelectionLength: Integer): Integer;
function SetSelectionRange(AnchorIndex, CaretIndex: Integer;
IndexUnit: TPDFlibFormSelectionUnit): Integer;
function GetSelectionRange(IndexUnit: TPDFlibFormSelectionUnit;
out Selection: TPDFlibFormSelection): Integer;
function SetTextDirection(
Direction: TPDFlibFormTextDirection): Integer;
function GetVisualCaretOrder(IndexUnit: TPDFlibFormSelectionUnit;
out CaretIndices: TPDFlibFormCaretIndices): Integer;
function MoveVisualCaret(ToRight: Boolean;
ExtendSelection: Boolean = False): Integer;
function GetSelectedText: WideString;
function ReplaceSelection(const ReplacementText: WideString): Integer;
function CutSelection(out CutText: WideString): Integer;
function PasteText(const Text: WideString): Integer;
function CanUndoEdit: Boolean;
function CanRedoEdit: Boolean;
function UndoEdit: Integer;
function RedoEdit: Integer;
procedure ClearEditHistory;
function DispatchInputEvent(
const InputEvent: TPDFlibFormInputEvent;
out InputResult: TPDFlibFormInputResult): Integer;
function CommitEdit: Integer;
procedure CancelEdit;
property TextDirection: TPDFlibFormTextDirection;
property ResolvedTextDirection: TPDFlibFormTextDirection;
property VisualCaretPosition: Integer;
property MaxUndoSteps: Integer;
property UndoEditCount: Integer;
property RedoEditCount: Integer;
property HoveredFieldIndex: Integer;
property PressedFieldIndex: Integer;
end;
Yöntemler
| Create | Arayanın sahibi olduğu bir kitaplık örneğine eklenen bir oturum oluşturur |
|---|---|
| AttachLibrary | Tüm geçici durumu sıfırlar ve arayanın sahibi olduğu başka bir kitaplık örneğini veya nil ekler |
| Reset | Alan değerlerini değiştirmeden ve eylem dağıtmadan odak, düzenleme ve seçim durumunu temizler |
| FocusField | Geçerli düzenlemeyi kesinleştirir veya iptal eder, önceki Widget için /Bl dağıtır ve sonra istenen görünür Widget için /Fo dağıtır |
| GetFieldPageRect | Seçili sayfayı değiştirmeden döndürülmüş görsel CropBox koordinatlarında bir görünür Widget dikdörtgeni döndürür |
| HitTest | Görsel bir sayfa noktasındaki en üstteki görünür Widget'ı döndürür; sayfa /Annots dizisindeki sonraki girdileri en öndeki isabet olarak kullanır |
| GetTabSequence | Sayfa sırasıyla sayfalar arası görünür Widget'ları döndürür ve /Tabs /R, /C, /S, PDF 2.0 /A ve /W anlambilimini, sayfa döndürmesini ve ViewerPreferences /Direction değerini uygular; eksik veya geçersiz bir /Tabs değeri ek açıklama dizisi sırasını kullanır |
| FocusAt | Görsel bir sayfa noktasını isabet testinden geçirir ve döndürülen Widget'ı normal kesinleştirme, odak kaybı ve odak eylemi yoluyla odaklar |
| FocusNext | Hesaplanan sekme dizisi boyunca isteğe bağlı sarmalama ve normal odak geçişi kurallarıyla ileri veya geri hareket eder |
| Blur | Geçerli düzenlemeyi kesinleştirir veya iptal eder ve odağı temizlemeden önce /Bl dağıtır |
| BeginEdit | Düzenlenebilir bir metin veya seçim alanına odaklanır ve özgün değerinin anlık görüntüsünü alır |
| SetEditValue | Geçici değeri günceller ve bir genişletilmiş grafem kümesini bölmeden metin alanının yapılandırılmış en fazla uzunluğunu zorlar |
| SetSelection | Geçici değer içinde 0 tabanlı bir UTF-16 seçim aralığını sınırlandırıp saklar |
| SetSelectionRange | İstenen dizin biriminde yönlü çapa ve imleç konumlarını sınırlandırır, bunları iç UTF-16 aralığına dönüştürür ve herhangi bir Unicode birimi kullanıldığında asla bir kod noktası veya grafem kümesi bölmez |
| GetSelectionRange | İstenen dizin biriminde çapayı, imleci, normalleştirilmiş başlangıcı ve uzunluğu özgün yönle birlikte döndürür |
| SetTextDirection | Otomatik, açık soldan sağa veya açık sağdan sola paragraf yönünü seçer ve önbelleğe alınmış görsel imleç sırasını geçersizleştirir |
| GetVisualCaretOrder | Karışık yön sınırlarındaki ayrı bölünmüş yuvalar dahil, grafem güvenli mantıksal imleç dizinlerini fiziksel soldan sağa sırada döndürür |
| MoveVisualCaret | Yönlü seçimi bir fiziksel görsel yuva kadar hareket ettirir veya genişletir ve mevcut seçimleri istenen fiziksel kenara doğru daraltır |
| GetSelectedText | Şu anda seçili UTF-16 metnini veya boş dizeyi döndürür |
| ReplaceSelection | Normalleştirilmiş seçimi tek bir veto edilebilir /K ve OnTextEdit işlemi üzerinden değiştirir, sonra kabul edilen değiştirmeden sonra imleci daraltır |
| CutSelection | Seçili metni aynı atomik değiştirme yoluyla döndürür ve kaldırır |
| PasteText | Geçerli seçimi, platform panosu bağımlılığı oluşturmadan arayanın sağladığı pano metniyle değiştirir |
| CanUndoEdit | Etkin düzenlemede tersine çevrilebilecek bir geçmiş girdisi olup olmadığını bildirir |
| CanRedoEdit | Etkin düzenlemede yeniden oynatılabilecek tersine çevrilmiş bir geçmiş girdisi olup olmadığını bildirir |
| UndoEdit | Saklanan son düzenlemeyi tersine çevirir ve önceki yönlü seçimini geri yükler |
| RedoEdit | Saklanan bir sonraki düzenlemeyi yeniden oynatır ve sonuçlanan yönlü seçimini geri yükler |
| ClearEditHistory | Etkin düzenlemenin geri alma ve yineleme geçmişini geçerli değerini veya seçimini değiştirmeden atar |
| DispatchInputEvent | Tek bir platformdan yansız işaretçi, tekerlek, tuş veya bileşik metin olayını dağıtır ve sonuçlanan odak, üzerine gelme, basma, değer ve seçim durumunu döndürür |
| CommitEdit | Ham değerini saklamadan önce adayı doğrular ve biçimlendirir, biçimlendirilmiş görünümü tazeler ve sonra OnValueChanged tetikler |
| CancelEdit | Alanı değiştirmeden geçici değeri ve seçimi atar |
Durum özellikleri
| LibraryInstance | Geçerli, sahipsiz TPDFlib örneği |
|---|---|
| FocusedFieldIndex | Odaklanan alan veya geçici Widget dizini; hiçbir Widget odaklı değilken sıfır |
| EditingFieldIndex | Düzenlenen temel metin veya seçim alanı; düzenleme etkin değilken sıfır |
| OriginalValue | BeginEdit tarafından yakalanan alan değeri |
| EditValue | Geçerli geçici değer |
| DisplayValue | Geçerli düzenleme değeri veya son başarılı kesinleştirmenin ürettiği biçimlendirilmiş görüntü değeri |
| SelectionStart | 0 tabanlı UTF-16 başlangıç dizini |
| SelectionLength | UTF-16 seçim uzunluğu |
| SelectionAnchor | İmleç yönlü bir seçim genişletirken sabit kalan 0 tabanlı UTF-16 çapa konumu |
| SelectionCaret | Yönlü seçimin 0 tabanlı UTF-16 hareketli kenarı |
| TextDirection | Yapılandırılmış yön; varsayılanı ftdAuto ve oturumdaki düzenlemeler boyunca korunur |
| ResolvedTextDirection | Açık yön veya etkin düzenleme değerinin ilk güçlü karakterinden seçilen otomatik yön |
| VisualCaretPosition | Önbelleğe alınmış fiziksel imleç sırasındaki geçerli yuva; hiçbir görsel hareket yuva seçmemişse -1 |
| MaxUndoSteps | 0 ile 10000 arası saklanan en fazla düzenleme geçmişi girdisi; varsayılan 1000'dir ve sıfır kaydı devre dışı bırakır |
| UndoEditCount | Şu anda UndoEdit için kullanılabilir saklanan girdi sayısı |
| RedoEditCount | Şu anda RedoEdit için kullanılabilir saklanan girdi sayısı |
| Modified | True; EditValue değeri OriginalValue değerinden farklı olduğunda doğrudur |
| HoveredFieldIndex | Şu anda etkin işaretçi giriş durumunda olan Widget veya sıfır |
| PressedFieldIndex | Eşleşen bırakmaya veya işaretçi iptaline kadar birincil işaretçi yakalamasını koruyan Widget veya sıfır |
Olaylar
| OnAction | Kullanılabilir odak, odak kaybı, tuş vuruşu, doğrulama ve biçimlendirme eylemleri için tipli bir TPDFlibActionInfo alır; bekleyen işlemi veto etmek için Allow değerini False yapın |
|---|---|
| OnFocusChanged | Yeni bir odak eylemi veto edildikten sonraki sıfıra geçişler dahil her tamamlanmış odak geçişini bildirir |
| OnValueChanged | Alan ve kirli görünümleri güncellendikten sonra başarıyla kesinleştirilmiş bir değer değişikliğini bildirir |
| OnTextEdit | Geçici değer değişmeden önce düzenleme türünü, UTF-16 seçimi, seçili metni ve değiştirilebilir yerine koymayı alır; atomik reddetme için Allow değerini False yapın |
Dönüş değeri
Durum değiştiren işlevler başarıda 1 döndürür ve istek geçersiz, yeniden girişli, veto edilmiş veya kesinleştirilemediğinde 0 döndürür; HitTest bir alan veya geçici Widget dizinini, GetTabSequence ise girdi sayısını döndürür
Seçim birimleri
fsuUTF16CodeUnit eski sıfır tabanlı WideString indeksleme sözleşmesini korur; açıkça istendiğinde bir vekil çiftin içindeki konumlar dahil
fsuUnicodeCodePoint geçerli bir vekil çifti tek yardımcı kod noktası sayar ve eşsiz bir vekili bağımsız tek bir kod noktası sayar
fsuGraphemeCluster eksiksiz genişletilmiş grafem kümelerini sayar; böylece birleştirici diziler ve bitişik emoji bölünmez kalır
Unicode sınır tabloları geçerli düzenleme değeri için önbelleğe alınır ve o değer değiştiğinde geçersiz kılınır
Çift yönlü gezinme
ftdAuto ilk güçlü karakteri kullanır ve düzenlemede güçlü yönlü karakter yoksa varsayılan olarak soldan sağayı seçer
Görsel dizi sırası her satır için bağımsız çözülür ve mantıksal UTF-16 alan değerini, PDF dizisini veya metin hizalamasını değiştirmez
Karışık yön sınırında bir mantıksal indeks iki ayrı görsel yuvayı kaplayabilir; böylece VisualCaretPosition o sınır üzerinden tekrarlanan hareketi ayırt eder
Örnek
var
Session: TPDFlibFormSession;
Selection: TPDFlibFormSelection;
begin
Session := TPDFlibFormSession.Create(PDF);
try
if Session.FocusAt(PageNumber, MouseX, MouseY) = 1 then
Session.FocusNext(False, True);
if Session.BeginEdit(Session.FocusedFieldIndex) = 1 then
begin
Session.SetEditValue('A' + WideChar($D83D) + WideChar($DE00) + 'B');
Session.SetSelectionRange(1, 2, fsuUnicodeCodePoint);
Session.GetSelectionRange(fsuUTF16CodeUnit, Selection);
Session.SetTextDirection(ftdAuto);
Session.MoveVisualCaret(True, True);
Session.PasteText('replacement');
if Session.CanUndoEdit then
Session.UndoEdit;
if Session.CanRedoEdit then
Session.RedoEdit;
Session.CommitEdit;
end;
finally
Session.Free;
end;
end;
Ayrıca bkz.
SetTextDirection, GetVisualCaretOrder, MoveVisualCaret, TPDFlibFormTextDirection, DispatchInputEvent, TPDFlibFormInputEvent, TPDFlibFormInputResult, UndoEdit, RedoEdit, ClearEditHistory, ReplaceSelection, CutSelection, PasteText, TPDFlibFormEditKind, SetSelectionRange, GetSelectionRange, ExecuteFormFieldScript, TPDFlibActionInfo