OnClick i DblClick - w jednym komponencie.

OnClick i DblClick - w jednym komponencie.
0

Witam.

Mam pewien problem...

Mam - powiedzmy komponent na formie Label1. - chciałbym aby po pojedyńczym kliku pokazał się showmessage('1');, a po podwójnym showmessage('2'); ....

Tylko jest problem natury takiej - gdzie uzupełnie OnClick i OnDblClick - to za każdym razem wykonuje się pozycja z OnClick... ):

Nie mam zielonego pojęcia o co w tym chodzi....

Pozdrawiam.

SZ
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 15 lat
  • Postów:3356
0

Pomyśl trochę - zanim w podwójnym klikniesz drugi raz, wykonałeś kliknięcie więc wywołuje się OnClick. Ponieważ w akcji robisz ShowMessage, które zmienia aktywność okna, OnDblClick w ogóle się nie wywoła.


Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir "Szczawik" Włodkowski
0

No właśnie dlatego tu napisałem.

Bo chciałbym poznać odpowiedz czy jest to możliwe do ominięcia...

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

musiał byś sam zrobić własny onClick i onDblClick używając MouseDown, MouseMove i MouseUp


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
crowa
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 8 lat
  • Lokalizacja:Poznań
  • Postów:295
0

hej Panowie za duzo kombinujecie
zrob sobie interval w zdarzeniu on click

klikasz raz - startuje timer i odlicza w dol, jesli w tym czasie nie nastapi ponowne klikniecie to masz on click w innym wypadku doble click.

Jakbys sobie pobral jeszcze z kontekstu myszy czas dbclicka to by bylo juz super- pamietaj o application.messages


Tomasz Andrzejewski
Delphi (XE3-XE7) framework engineer @ InterLan
MCP: Microsoft SQL Server 2008, Implementation and Maintenance
0

powiedz co chcesz uzyskać, zazwyczaj to że wykona się onClick przed onDblClick nie przeszkadza
prawdopodobnie tylko w twoim teście jest źle ale docelowo chyba nie będziesz pokazywał MessageBoxa tylko coś robił więc wtedy może nie będzie źle

np jeśli po pojedynczym kliknięciu link ma dostać ramkę, a po podwójnym ma zostać otworzona jakaś strona to nie przeszkodzi to że przed otworzeniem strony link będzie obramowany a ewentualnie możesz w dblClick tą ramkę zdjąć

to taki przykład bo nie wiem co tam chcesz robić

0

killmesoftly: to jest troche bez sensu. Zależy o jaki scenariusz Ci chodzi:
1.

  • Wyświetli się 'click' w przypadku pojedyczego klikniecia
  • Wyświetli się 'click' i zaraz potem 'dblclick' w przypadku podwójnego klikniecia
  • Wyświetli się 'click' w przypadku pojedyczego klikniecia
  • Wyświetli się 'dblclick' w przypadku podwójnego klikniecia

Scenariusz 1 jest trywialny dla sytuacji o jakiej pisze poprzednik (czyli zdarzenie nie jest blokujące, w szczególności nie jest wyświetlane żadne modalne okno). Można jednak zamiast MessageDlg dać MessageBox z HWND = 0, wtedy wyświetli się komunikat, ale nie będzie blokujący.

Co do drugiego to jest możliwy tylko w przypadku timeoutu (czyli sytuacja gdy klikniety jest przycisk myszy tylko raz jest wykrywana dopiero po ok. sekundzie). Można zrobić TTimerem, ale jest to takie troche mało profesjonalne. W ogóle nie widzę praktycznego zastosowania tego drugiego scenariusza.

Powiedz dokładnie co chcesz uzyskać.

zbynio_k
  • Rejestracja:około 15 lat
  • Ostatnio:ponad 8 lat
0

zainteresował mnie ten temat na tyle, że spróbowałem napisać programik i ....
wydaje się, że ALBO - ALBO (no chyba, jak sugeruje @Misiekd napiszesz wlasną obsługę)
ani TTimer ani GetTickCount nie "podchodzi"

przychylam się do :

exeman2 napisał(a)

killmesoftly: to jest troche bez sensu.

exeman2 napisał(a)

W ogóle nie widzę praktycznego zastosowania tego drugiego scenariusza.


jeśli program, który właśnie mozolnie napisałeś ruszył od pierwszego "kopa" to znaczy, że .....
na pewno gdzieś popełniłeś błąd
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 2 godziny
  • Postów:1595
0
exeman2 napisał(a)

W ogóle nie widzę praktycznego zastosowania tego drugiego scenariusza.

A obsluga ikon w windowsie? Pojedynczy klik zaznaczenie dbl uruchomienie :)

zbynio_k
  • Rejestracja:około 15 lat
  • Ostatnio:ponad 8 lat
0

no to pozostaje

Misiekd napisał(a)

musiał byś sam zrobić własny onClick i onDblClick używając MouseDown, MouseMove i MouseUp


jeśli program, który właśnie mozolnie napisałeś ruszył od pierwszego "kopa" to znaczy, że .....
na pewno gdzieś popełniłeś błąd
zbynio_k
  • Rejestracja:około 15 lat
  • Ostatnio:ponad 8 lat
0
killmesoftly napisał(a)

No właśnie dlatego tu napisałem.

Bo chciałbym poznać odpowiedz czy jest to możliwe do ominięcia...

i jakoś Cię to w ogóle nie interesuje :>
czekasz na gotowca ??


jeśli program, który właśnie mozolnie napisałeś ruszył od pierwszego "kopa" to znaczy, że .....
na pewno gdzieś popełniłeś błąd
CL
  • Rejestracja:ponad 15 lat
  • Ostatnio:7 miesięcy
0
zbynio_k napisał(a)
killmesoftly napisał(a)

No właśnie dlatego tu napisałem.

Bo chciałbym poznać odpowiedz czy jest to możliwe do ominięcia...

i jakoś Cię to w ogóle nie interesuje :>
czekasz na gotowca ??

ten temat ma ponad 2 lata... autor na pewno z niecierpliwością przegląda codziennie to forum i czeka na odpowiedź :]

zbynio_k
  • Rejestracja:około 15 lat
  • Ostatnio:ponad 8 lat
0

o k************a masz RACJĘ
niby miesiąc i dzień jakby blisko ... tylko ten rok ;-P


jeśli program, który właśnie mozolnie napisałeś ruszył od pierwszego "kopa" to znaczy, że .....
na pewno gdzieś popełniłeś błąd
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 2 godziny
  • Postów:1595
0

Gotowiec dla wszystkich ktorzy maja z tym problem:

Kolorujemy panele

Kopiuj
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Panel1.Color := clGreen; //czyszczenie
  Panel2.Color := clGreen; //czyszczenie
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
t := TRUE; //zmienna globalna
Timer1.Enabled := True;
end;

procedure TForm1.Label1DblClick(Sender: TObject);
begin
  t := False;
  Panel2.Color := clRed;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin //interval na 150 wystarczy a enable na false;
if t then
  Panel1.Color := clYellow;
  Timer1.Enabled := False;
end;
zbynio_k
  • Rejestracja:około 15 lat
  • Ostatnio:ponad 8 lat
0

@woolfik,
jeszcze raz ukłony dla Twojej wiedzy :)
nie pieklij się za często, choć i mnie złość nieraz ogarnia ;-)
próbowałem czegoś podobnego ale .... (jakoś NIE "wyszło")


jeśli program, który właśnie mozolnie napisałeś ruszył od pierwszego "kopa" to znaczy, że .....
na pewno gdzieś popełniłeś błąd
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)