Czym jest program_ui

Od jakiegoś czasu intensywnie pracuję nad nowym frameworkiem avocado_ui, który pozwoli tworzyć aplikacje z graficznym interfejsem użytkownika na Windowsie. To wrapper na WinAPI napisany w Free Pascalu, a następnie udostępniany w Avocado w postaci prostych, czytelnych funkcji.

Aby tworzyć aplikacje z interfejsem graficznym w Avocado, na początku programu należy użyć. program_ui nazwaprogramu najlepiej z małych liter bez polskich znaków i liczb bez spacji w środku, najlepiej jedno słowo, może być podkreślnik _ między słowami. To włącza tryb UI i pozwala kompilować aplikacje okienkowe. Następnie trzeba zaimportować bibliotekę UI: importuj avocado_ui lub import avocado_ui Ważne: biblioteka avocado_ui musi znajdować się w folderze moduly - to właśnie tam trafiają wszystkie biblioteki używane przez Avocado.

Na ten moment działa już ponad 82 funkcji, m.in.:

  • tworzenie, zamykanie i wyświetlanie okien

  • okna bez ramek, przeciąganie za tło, przezroczystość

  • centrowanie okna, zmiana pozycji i rozmiaru

  • zawsze na wierzchu, fokus, minimalizacja, maksymalizacja, przywracanie

  • zmiana tytułu okna, kolorów nagłówka i tła

  • rysowanie tekstu na środku okna oraz prosta grafika (GDI)

  • kontrolki: Memo, Button, Label, Input, Checkbox

  • obsługa tekstu w Memo (append, pobieranie treści)

  • okna dialogowe (MessageBox, pytanie Tak/Nie)

  • pobieranie pozycji i rozmiaru okna, obszar klienta

  • możliwość dokładnego sterowania zachowaniem okna (ramki, rozmiar, przyciski)

Zdarzenia i interakcje

  • obsługa kliknięć (SetOnClick)

reakcja na zmianę rozmiaru okna (SetOnResize)

  • obsługa klawiatury: wciśnięcie i puszczenie klawisza (SetOnKeyDown, SetOnKeyUp) kontrolowane zamykanie okna (OnCloseQuery – decydujesz, czy okno ma się zamknąć)

Zarządzanie oknami

  • wyciąganie okna na wierzch bez kradzieży fokusu (BringToTop)

  • wysyłanie okna na spód (SendToBack)

  • pokazywanie i ukrywanie okien (Show, Hide)

pełne wsparcie dla okien głównych i podrzędnych (child windows)

  • blokowanie i odblokowywanie okna (tryb modalny)

Informowanie użytkownika

  • miganie okna na pasku zadań (FlashWindow)

  • określona liczba mrugnięć

  • mruganie w nieskończoność

  • zatrzymanie efektu

  • Pełna kontrola nad geometrią

  • minimalny rozmiar okna (SetMinWindowSize)

  • reakcja na przesuwanie okna (SetOnMove)

  • reakcja na zmianę rozmiaru w trakcie przeciągania (SetOnSizing)

  • obsługa przesuwania „na żywo” (SetOnMoving)

  • najpotężniejsze zdarzenie: SetOnWindowPosChanging

  • przyciąganie do siatki (Grid Snap)

  • blokada zmiany rozmiaru

  • blokada Z-Order

  • pełna kontrola nad pozycją i rozmiarem nawet gdy zmienia je kod lub system

  • WM_WINDOWPOSCHANGED Jedno miejsce zawierające wszystkie informacje o zmianie okna:

    pozycja rozmiar flagi systemowe Idealne do: debugowania zachowania okna aktualizacji wewnętrznego stanu aplikacji reagowania na zmiany wywołane myszką, systemem lub kodem

  • System Anchors (Kotwice) Pierwszy krok do automatycznych layoutów:

  • SetAnchor(hMemo, [akLeft, akTop, akRight, akBottom]) Dzięki UpdateLayout elementy UI same dopasowują się do rozmiaru okna bez ręcznego liczenia pozycji. Uniwersalne funkcje tekstu Działają na: Window, Button, Label, Edit GetText SetText

Nowoczesne efekty wizualne

  • Rozmycie tła (Acrylic / Blur)

  • Zaokrąglone rogi okna (Windows 11)

  • Cień pod oknem (idealne dla okien bezramkowych)

Stan okna

  • sprawdzenie, czy okno jest zminimalizowane

  • sprawdzenie, czy okno jest zmaksymalizowane

  • pobieranie tytułu okna (GetWindowTitle)

  • Informacje o monitorze

Możliwość pobrania danych o monitorze, na którym znajduje się okno (rozdzielczość, obszar roboczy bez paska zadań). Idealne do centrowania i obsługi wielu monitorów. „Przyklejanie” okien (Snapping)

  • Okno może automatycznie przyciągać się do krawędzi ekranu z określoną tolerancją – dokładnie jak w nowoczesnych systemach.

  • Sprawdzanie długości tekstu

  • Szybkie sprawdzenie, czy kontrolka zawiera tekst, bez pobierania całej zawartości do pamięci.

  • Dynamiczne usuwanie kontrolek

  • Możliwość natychmiastowego niszczenia przycisków, etykiet, paneli czy okien w trakcie działania programu – bez pytań i bez zdarzeń zamykania.

  • Czyszczenie kontrolek

  • Jedna funkcja do czyszczenia zawartości:

    Memo - usuwa tekst Checkbox - odznacza działa poprawnie zależnie od typu kontrolki

Obsługa schowka systemowego

  • Kopiowanie, wycinanie i wklejanie zaznaczonego tekstu w Edit, Memo, RichEdit i ComboBox – pełna integracja z systemem.

  • Cofanie operacji (Undo)

  • Wsparcie dla cofania ostatniej akcji oraz sprawdzania, czy cofnięcie jest możliwe (np. do aktywowania przycisku „Cofnij”).

Celem jest prosty, spójny i lekki interfejs, bez kopiowania LCL czy innych ciężkich frameworków. Avocado ma pozwalać szybko tworzyć narzędzia i aplikacje desktopowe bez walki z WinAPI. To dopiero początek - moduł będzie dalej rozwijany i porządkowany. Jeśli interesuje Cię kierunek rozwoju Avocado albo chcesz mieć realny wpływ na to API, daj znać w komentarzu. Poniżej zdjęcia UI.