Potrzebny komponent albo sposób

Potrzebny komponent albo sposób
robertz68
  • Rejestracja:około 18 lat
  • Ostatnio:7 dni
  • Lokalizacja:Zielona Góra
0

Witajcie,

do programiku potrzebuję pola do wyszukiwania. Chciałbym aby to było coś na kształt pola edit ale działało w sposób taki że wpisując pierwsze znaki pojawiają się następne pobrane z bazy danych.
Co będę pisał, jeden obraz wart jest tysiąca słów więc proszę:
screenshot-20200205200933.png
znacie może jakiś komponent który to potrafi lub sposób aby to sprytnie zrobić?

flowCRANE
Kursora nie uwzględniłeś. :P
robertz68
ja pierdziu, no zapomniałem ;-)
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 minuty
  • Lokalizacja:Tuchów
  • Postów:12154
4

Taką funkcjonalność implementują przede wszystkim kontrolki typu ComboBox, tyle że podpowiadanie skorelowane jest z zawartością listy rozwijalnej i wygląda nieco inaczej – końcowy fragment dopasowania jest zaznaczony (standardowo, jako SelText), więc podczas wpisywania kolejnych liter jest on nadpisywany, po czym zawartość listy walidowana jest ponownie i jeśli zostanie znalezione dopasowanie, to końcowy fragment zostaje dodany i znów zaznaczony. I tak w kółko. Jest to funkcjonalność dodana do systemowej kontrolki, czego ona w standardzie IMO nie obsługuje.

Nie znam komponentu będącego polem edycyjnym z taką funkcjonalnością, ale jeśli niczego nie znajdziesz to możesz taką funkcjonalność sobie dodać do zwykłego pola edycyjnego, na kształt tej z comboboxów. Przykład znajdziesz np. tutaj How to implement autocompletion in a TEdit. Ale nie będzie to tak działać jak wskazuje na to obrazek poglądowy.

Natomiast jeśli chciałbyś napisać swój komponent z taką funkcjonalnością, to możesz co nieco zaczerpnąć z mojego artykułu na temat renderowania dwukolorowego tekstu. Co prawda jest on dla Lazarusa i jego przeznaczenie jest nieco inne, ale łatwo można go zmodyfikować i dopasować do Twoich wymagań. Jedyne co byś potrzebował to zaimplementować zaznaczanie oraz przewijanie tekstu, gdy ten nie będzie się mieścił w kontrolce. Nie będzie to łatwe do zaimplementowania, ale budowa takiej kontrolki nie zajmie więcej niż dniówkę. ;)


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 4x, ostatnio: flowCRANE
_13th_Dragon
Ale nie będzie to tak działać jak wskazuje na to obrazek poglądowy a kto mu zabroni zaznaczenie inaczej rysować?
flowCRANE
W TEdit może być ciężko cokolwiek namalować – nie obsługuje OnPaint, więc trzeba by było nadpisać całą obługę komunikatu WM_PAINT i zadbać o wszystko. A to kupa rzeźbienia w WinAPI, bez gwarancji powodzenia.
robertz68
  • Rejestracja:około 18 lat
  • Ostatnio:7 dni
  • Lokalizacja:Zielona Góra
0

Kurcze, normalnie nie mam miejsca na comboboxa Aplikacja jest na ekrany o małej rozdzielczości a dodatkowo obsługa dotykowa - klawiatura swoje zabiera.
Ale druga sugestia może się przydać. Już biorę się za testowanie.

flowCRANE
To na Androida?
robertz68
nie, vcl, POS do sprzedaży w barze, alternatywa dla Gastro POS. Program już działa ale chcę dołożyć funkcjonalność wystawiania faktur na stanowisku POS, niestety ekran ma rozdzielczość 1024x768 czyli taki trochę standard w tych urządzeniach a to bardzo mało na klawiaturę ekranową, troszkę editów i kilka przycisków w które da się trafić palcem.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 minuty
  • Lokalizacja:Tuchów
  • Postów:12154
0

IMO rozsądnym rozwiązaniem by było dodanie autouzupełniania do standardowego pola edycyjnego, w taki sposób, w jakim implementuje to combobox. Wszystko dlatego, że końcowy tekst dopasowania nie jest jedynie renderowany, a jest integralną częścią tekstu kontrolki.

Jeśli zrobi się to inaczej, czyli domaluje dopasowanie bez modyfikacji tekstu kontrolki, to trzeba będzie w jakiś sposób umożliwić ”akceptację” dopasowania, a tym samym zmianę tekstu komponentu. Może za pomocą klawisza Enter, może inaczej – to zależy od tego, jak masz oprogramowaną obsługę klawiszy i czy w ogóle masz wygenerowane zdarzenia dla wciskania klawiszy. No i pozostanie też kwestia obsługi programu za pomocą klawiatury – mowa o klawiszu Tab i przenoszeniu fokusa.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
robertz68
  • Rejestracja:około 18 lat
  • Ostatnio:7 dni
  • Lokalizacja:Zielona Góra
1

Chyba rozwiązałem problem, użyłem ComboBox, załadowałem do niego w trakcie onShow formy bazę nipów, chwilkę to trwa ale nie jest tak źle biorąc pod uwagę że jest tam teraz 1700 rekordów a jestem podłączony do niej przez Internet. Następnie ustawiłem style ComboBox na csSimple i poza wyszarzeniem tekstu wszystko działa prawidłowo. ComboBox wygląda jak Edit.
Malutka prezentacja (od 11 sekundy):

flowCRANE
Video unavailable. This video is private.
robertz68
już powinno działać.
flowCRANE
No i dobrze wyszło. Jedynie separatory trochę psują filtrowanie. :P
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 minuty
  • Lokalizacja:Tuchów
  • Postów:12154
0

W sumie to nie zdawałem sobie sprawy z tego, że – przynajmniej w Lazarusie – można wizualnie zamienić combobox w edit, ustawiając właściwość Style na csSimple. Będzie wyglądać jak zwykłe pole edycyjne, ale posiadać ukrytą listę (już nierozwijalną) braną pod uwagę podczas filtrowania.

Fajnie – nie znałem tego ficzeru. ;)


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 4x, ostatnio: flowCRANE
WL
  • Rejestracja:około 21 lat
  • Ostatnio:około miesiąc
  • Postów:1082
1
robertz68 napisał(a):

Chyba rozwiązałem problem, użyłem ComboBox, załadowałem do niego w trakcie onShow formy bazę nipów, chwilkę to trwa ale nie jest tak źle biorąc pod uwagę że jest tam teraz 1700 rekordów a jestem podłączony do niej przez Internet.

Jeżeli chwila to ok. 1,2 do 2s, to może lepiej załaduj dane na starcie aplikacji i oczywiście dane do cache z odświeżaniem po zmianie kartoteki źródłowej.
Dlaczego tak?
Ano skoro to kontrahenci to pewnie są potrzebni praktycznie zawsze, w każdej sesji używania aplikacji.
A więc lepiej poczekać chwilkę raz na starcie niż chwilę za każdym razem.

Następnie ustawiłem style ComboBox na csSimple i poza wyszarzeniem tekstu wszystko działa prawidłowo. ComboBox wygląda jak Edit.

Jeśli to Windows, to może w stronę IAutoComplete?
Szczegóły znajdziesz np tu (druga odpowiedź):
https://stackoverflow.com/questions/5465590/auto-append-complete-from-text-file-to-an-edit-box-delphi

Osobiście wolę, aby wszelkie lookups prezentowały mi listę danych spełniające kryteria wyszukiwania z której mogę wybrać interesujący mnie element.
Tylko Ty masz tam aplikację klasy POS, a te z definicji mają specyficzne wymagania i nie wszystko może tam pasować, prawda?

robertz68
  • Rejestracja:około 18 lat
  • Ostatnio:7 dni
  • Lokalizacja:Zielona Góra
0

@furious programming: Mój program nie utworzy nipu z kreseczkami czy spacjami ale problemem jest oryginalne Gastro, tam nadal można tak zrobić i ciężko byłoby to zmienić. Poprawiłem to w ten sposób że dynamicznie tworzę nową kolumnę i do niej kopiuję dane o nipach sformatowane w sposób jaki mi odpowiada. Tak więc ja już wyszukuję w ładnie sformatowanych danych.

@wloochacz dzięki za uwagi, zawsze biorę je pod uwagę lub co najmniej rozważam je.
Co do ładowania danych, stanowisk sprzedaży jest kilka i dane są potrzebne zawsze aktualne. Dlatego zdecydowałem się na sposób najbardziej drastyczny czyli ładowanie dynamiczne. Rzeczywiście trwa to mniej więcej tyle co podałeś ale widocznie nie doczytałeś że dane pobieram z bazy do której jestem podłączony przez internet. W środowisku produkcyjnym w sieci lokalnej ten czas spada drastycznie ale z drugiej strony komputery Pos to najczęściej Celerony j1900 a ich wydajność jest delikatnie mówiąc słaba. Dlatego i tak trzeba poczekać około 1 sekundy na załadowanie około 2 tys. rekordów. Na szczęście nie jest to tak dużym problemem ponieważ:

  • po pierwsze ilość faktur do paragonów to jest mniej więcej 1:500 (w moim środowisku produkcyjnym),
  • po drugie, w porównaniu do oryginalnego programu Gastro Pos jestem szybszy kilka tysięcy procent (to nie błąd) więc i tak załoga będzie wniebowzięta :).

Sposób na AutoComlete jest ciekawy, na pewno przyda się w jakimś projekcie - dzięki.

Ostatnia sprawa to rozwijana lista, tak mi też podoba się rozwijana lista ale w obsłudze "palcem" za bardzo to się nie sprawdza. Jak napisałeś - aplikacje tego typu mają swoje prawa a dodatkowo pracownicy je obsługujący nie są informatykami a nawet pracownikami biurowymi.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)