logo
small logo
  • Produkty
  • Zamów
  • Wsparcie techniczne
  • About
  • Customer panel Wsparcie techniczne
    • en
    • de
    • JP
    • ZH
  • Glówna strona
  • /
  • Articles
  • /
  • Tworzenie raportów za pomocą formularzy dialogowych
  • Wykorzystanie interaktywnych map w FastReport VCL 2021

    30 kwietnia 2021

    To już ostatni artykuł z cyklu kursów programu edukacyjnego Akademik. W poprzednich publikacjach rozważaliśmy

    read more
  • Instalowanie Fastreport w Lazarus

    17 marca 2021

    W ramach programu edukacji akademickiej postanowiliśmy stworzyć kilka artykułów wsparcia dla studentów. Jeśli tworzysz oprogramowanie biznesowe

    read more
  • Praca z wykresami i wykresami w FastReport VCL

    22 marca 2021

    Nadal publikujemy artykuły pomocnicze dla studentów w ramach programu edukacyjnego Akademii. Każdy programista w pewnym

    read more
  • Podłączenie raportu do danych z FastReport w Lazarusie

    26 marca 2021

    W poprzednim artykule o pracy z wykresami i wykresami, poznaliśmy już grafikę biznesową i kody

    read more
  • Raporty internetowe w Lazarusie na Linuksie

    15 grudnia 2020

    Do niedawna zadanie generowania raportów przez WWW z aplikacji napisanej w Lazarusie było, powiedzmy, bardzo

    read more

Tworzenie raportów za pomocą formularzy dialogowych

26 kwietnia 2021

Tworzenie raportów za pomocą formularzy dialogowych

W naszych poprzednich artykułach w ramach programu edukacyjnego "Akademik" nauczyliśmy się instalować FastReportw Lazarusie, opanowaliśmy pracę z diagramami, wykresami i kodami kreskowymi, oraz połączyliśmy raport z danymi. Teraz zajmiemy się formularzami dialogowymi.

Często trzeba ustawić pewne parametry lub przekazać dane przed wyświetleniem raportu. Oczywiście, można to zrobić przy pomocy środowiska programistycznego, ale FastReport posiada własne środki do projektowania form dialogowych. Poza standardowymi stronami, możesz w swoim raporcie wykorzystać kilka form dialogowych.

Aby utworzyć nowy formularz należy użyć  FastReport przycisku w przyborniku projektanta - dodaje on nową stronę do raportu. Po przejściu na stronę z formularzem dialogowym zmieni się pole operacyjne projektanta - teraz jest to formularz, na którym można umieszczać obiekty - elementy sterujące.

Przykład formularza dialogowego

Jak widać na rysunku, proces modelowania formularza dialogowego jest podobny do pracy z formularzami w każdym nowoczesnym środowisku programistycznym. Formularz dialogowy posiada specjalną siatkę, która pozwala wygodnie rozmieszczać na nim obiekty.

Elementy kontrolne

Obiekty formularza dialogowego są standardowe dla wszystkich nowoczesnych środowisk programistycznych. Aby umieścić element sterujący, należy kliknąć obiekt, a następnie odpowiednie miejsce na formularzu.

Element

Tytuł

Tytuł

 

TfrxLabelControl

Element kontrolny służy do wyświetlania objaśnień na formularzu dialogowym.

 

TfrxEditControl

Element sterujący służy do wprowadzania wiersza tekstu z klawiatury.

 

TfrxMemoControl

Element sterujący służy do wprowadzania kilku linii tekstu z klawiatury.

 

TfrxButtonControl

Elementem sterującym jest przycisk.

 

TfrxCheckBoxControl

Elementem sterującym jest flaga, która może być włączona lub wyłączona. Obok flagi wyświetlane jest objaśnienie.

 

TfrxRadioButtonControl

Elementem sterującym jest analog klucza przełączającego z zależnym mocowaniem. Z tego powodu nie jest on używany samodzielnie.

 

TfrxListBoxControl

Elementem sterującym jest lista linii z możliwością wyboru jednej z nich.

 

TfrxComboBoxControl

Elementem sterującym jest rozwijana lista linii z możliwością wyboru jednej z nich.

 

TfrxPanelControl

Elementem sterującym jest panel, który służy do połączenia kilku elementów sterujących.

 

TfrxGroupBoxControl

Elementem sterującym jest panel z objaśnieniem, który służy do połączenia kilku kontrolek.

 

TfrxPageControl

Kontrolka pozwala na połączenie kilku zakładek zawierających różne kontrolki na tym samym formularzu podczas procesu projektowania.

 

TfrxDateEditControl

Elementem sterującym jest pole do wprowadzania daty za pomocą rozwijanego kalendarza.

 

TfrxImageControl

Elementem sterującym jest obraz w formacie BMP, ICO, WMF lub EMF.

 

TfrxBevelControl

Element kontrolny służy do formatowania formularza dialogowego.

 

TfrxBitBtnControl

Elementem sterującym jest przycisk z obrazkiem.

 

TfrxSpeedButtonControl

Elementem sterującym jest przycisk z obrazkiem.

 

TfrxMaskEditControl

Elementem sterującym jest pole do wprowadzania danych według ustalonego szablonu.

 

TfrxCheckListBoxControl

Elementem sterującym jest lista linii z flagami.

 

DBLookupComboBox

Elementem sterującym jest lista pól wybranej kolumny w tabeli.

Raport “Hello, World!”z formularzem dialogowym

Teraz, używając formularza dialogowego, utworzymy raport wyświetlający okno powitania przed jego utworzeniem. Aby to zrobić:

  1. Utwórz nowy raport i dodaj do niego formularz dialogowy.
  2. Umieść obiekty TfrxLabelControl, TfrxButtonControl na formularzu.

Szablon prostego raportu z formularzem dialogowym

  1. Ustawianie właściwości obiektów:
TfrxLabelControl:
Caption = 'Hello, World!'
 
TfrxButtonControl:
Caption = 'OK'
Default = True
ModalResult = mrOk

Dla formularza ustaw właściwość BorderStyle = bsDialog.

Po zakończeniu ustawiania formularza dialogowego wróć do strony raportu i umieść w niej obiekt "Text" z tekstem w środku. Uruchomienie wykonania raportu i wyświetlenie formularza:

Prosty raport z formularzem dialogowym

Jeśli klikniesz przycisk OK, raport zostanie utworzony i wyświetlony. Jeżeli zamkniesz okno przyciskiem krzyżyka, to raport nie zostanie zbudowany. Tak działa algorytm dialogu w FastReport: jeżeli są dostępne formularze dialogowe, to raport zostanie utworzony tylko w przypadku, jeżeli każdy formularz został zamknięty przyciskiem OK, czyli został zwrócony ModalResult = mrOk. Dlatego ustawimy właściwość ModalResult naszego przycisku na równą mrOk.

Wprowadzanie parametrów i przekazywanie ich do raportu

Skomplikujmy nasz przykład, aby pokazać, w jaki sposób można przekazać wartości wprowadzone do formularza dialogowego do raportu. W tym celu skomplikujemy nasz formularz w następujący sposób:

Formularz dialogowy do wprowadzania parametru

Na stronie raportu umieszczamy obiekt "Text" z następującą treścią w środku:

You've entered: [Edit1.Text]

Uruchom raport i zobacz, że parametr, który wprowadziliśmy jest wyświetlany poprawnie. Inne obiekty formularza dialogowego mogą być adresowane w ten sam sposób. Ponieważ każdy obiekt ma unikalną nazwę w ramach projektu, może być użyty w dowolnym miejscu dokumentu.

Współdziałanie elementów sterujących

Za pomocą skryptu można w prosty sposób zaimplementować logikę funkcjonowania formularza dialogowego, np. interakcję pomiędzy jego kontrolkami. Rozważmy prosty przykład. Modyfikujemy nasz formularz w następujący sposób:

Formularz dialogowy z kontrolką logiczną

Dwukrotne kliknięcia na obiekt "CheckBox" – stworzy obsługę zdarzenia OnClick. Napisz następujący kod:

PascalScript:
1
2
3
4
procedure CheckBox1OnClick(Sender: TfrxComponent);
begin
 Button1.Enabled := not CheckBox1.Checked;
end;

 

C++ Script:
1
2
3
4
void CheckBox1OnClick(TfrxComponent Sender)
{
 Button1.Enabled = !CheckBox1.Checked;
}

Po uruchomieniu raportu warto sprawdzić, jak przycisk reaguje na zmianę stanu flagi.

Kilka formularzy dialogowych

Rozważmy, jak działa raport z dwoma formularzami dialogowymi. Utwórzmy raport z dwoma oknami dialogowymi i jedną stroną:

Consider how a report with two dialog forms works. Let's create a report with two dialog boxes and one page:

Pierwszy formularz dialogowy:

Pierwszy formularz dialogowy

Drugi formularz dialogowy:

Drugi formularz dialogowy

Dla przycisków OK i Cancel ustawiamy właściwości ModalResult (odpowiednio mrOk i mrCancel). Teraz uruchamiamy raport. Najpierw będziemy musieli odpowiedzieć na pytania z pierwszego okna dialogowego (imię, czy masz dzieci), a następnie, po kliknięciu przycisku OK - z drugiego (imiona dzieci). Po kliknięciu przycisku OK w drugim oknie dialogowym, raport zostanie zbudowany. Tak działa rdzeń FastReport - jeżeli jest kilka okien dialogowych, to są one wyświetlane w kolejności ich wytworzenia i każde następne okno dialogowe zostanie wyświetlone po kliknięciu przycisku OK w poprzednim oknie dialogowym (z właściwością ModalResult = mrOk). Jeżeli którekolwiek z okien dialogowych zostanie anulowane (przy pomocy przycisku Anuluj lub ikony krzyżyka w pasku tytułowym), to wytwarzanie raportu zostanie zatrzymane.

Zarządzanie formularzami raportów

W poprzednim przykładzie, oba formularze dialogowe są wyświetlane niezależnie od tego, czy zaznaczyliśmy flagę “Have children”czy nie. Teraz pokażemy, jak ukryć drugie okno dialogowe w przypadku, gdy ta flaga nie jest zaznaczona. W tym celu utworzymy handler OnClick dla przycisku OK w pierwszym oknie dialogowym (kliknij dwukrotnie na przycisk, aby utworzyć handler):

PascalScript:
1
2
3
4
procedure Button1OnClick(Sender: TfrxComponent);
begin
 DialogPage2.Visible := CheckBox1.Checked;
end;

 

C++Script:
1
2
3
4
void Button1OnClick(TfrxComponent Sender)
{
 DialogPage2.Visible = CheckBox1.Checked;
}

OnRunDialogs

Ten kod ukrywa drugi formularz dialogowy (DialogPage2), jeżeli flaga nie jest zaznaczona. Jeśli uruchomimy wykonywanie raportu, zobaczymy, że wszystko działa poprawnie.

Inny sposób zarządzania formularzami polega na wykorzystaniu zdarzenia raportu OnRunDialogs. Aby wytworzyć handler tego zdarzenia należy wybrać obiekt Raport w drzewie raportów lub w inspektorze obiektów i przejść do zakładki "Zdarzenia" w inspektorze. Podwójne kliknięcie na zdarzenie OnRunDialogs utworzy odpowiedni handler.

W handlerze wpisujemy następujący kod:

PascalScript:
1
2
3
4
5
6
7
8
9
procedure frxReport1OnRunDialogs(var Result: Boolean);
begin
 Result := DialogPage1.ShowModal = mrOk;
 if Result then
 begin
 if CheckBox1.Checked then
 Result := DialogPage2.ShowModal = mrOk;
 end;
end;

 

C++Script:
1
2
3
4
5
6
7
8
9
void frxReport1OnRunDialogs(bool &Result);
{
 Result = DialogPage1.ShowModal == mrOk;
 if (Result)
 {
 if (CheckBox1.Checked)
 Result = DialogPage2.ShowModal == mrOk;
 }
}

Handler działa w następujący sposób: wyświetlamy pierwsze okno dialogowe. Jeżeli zostało ono zamknięte przyciskiem OK, to sprawdzamy stan flagi CheckBox1 i w razie potrzeby wyświetlamy drugie okno dialogowe. Jeżeli handler zwraca Result = True, to raport jest budowany; jeżeli Result = False, to raport jest zatrzymywany.

about product zamów
avatar
Sergey Plastun
VCL Development
Fast Reports Team: Sergey Plastun - VCL Development at Fast Reports
VCL Lazarus FastReport Delphi Academic

Add comment
logo
  • 800-985-8986 (English, US)
  • +4930568373928 (German)
  • +55 19 98147-8148 (Portuguese)
  • info@fast-report.com
  • 901 N Pitt Str #325 Alexandria VA 22314
  • Zamów
  • Pobierz
  • Dokumentacja
  • Opinie użytkowników
  • Jak odinstalować nasze produkty
  • FAQ
  • Tutorial Video
  • Forum
  • Articles
  • Our News
  • Prasa o nas
  • Partnerzy
  • Extended licensing
  • Kontakty

© 1998-2023 by Fast Reports Inc.

  • Poufność