Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 14 mar 2025, o 13:33


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
    Autor Wiadomość
    PostNapisane: 10 kwi 2021, o 19:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1967
    Lokalizacja: Lipsko
    Pomógł: 125

    Ostro wziąłem się za naukę, ale co chwila jakieś kwiatki, których nie mogę przeskoczyć... a w sieci już ze 3h szukam :-/
    Chciałbym z innej procedury wywołać procedurę obsługującą, np. buttona czy okienko tekstowe aby nie pisać tego samego dwa razy.
    Mam np. coś takiego:

    Składnia: [ Pobierz ] [ Ukryj ]
    język delphi
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    i chciałbym aby wykonało się to nie tylko kiedy wprowadzę zmiany w okienku tekstowym, ale też przy wywołaniu np. tego zdarzenia:

    Składnia: [ Pobierz ] [ Ukryj ]
    język delphi
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    ...co oczywiście nie działa, ale o taką ideę mi chodzi. Jak to można zrealizować? Przecież musi być jakiś sposób, żeby nie pisać kilka razy tego samego bloku jeśli kilka zdarzeń miałoby wykonać tą jedną procedurę. To było by kompletnie nielogiczne i nieekonomiczne.

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 19:56 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 20:09 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1168
    Lokalizacja: Kraków
    Pomógł: 93

    Możesz też przypisać jedną procedurę do kilku obiektów. I przez identyfikację obiektu Sender rozpoznawać, co wywołało tą procedurę.
    Ja tak robiłem na przykład przy pseudo kalkulatorze (przyciski z cyframi miały jedną procedurę obsługującą wciśnięcie)


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 20:43 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1967
    Lokalizacja: Lipsko
    Pomógł: 125

    @auers, niestety to nie działa :( Chyba nawet tak kombinowałem podczas szukania na różne sposoby.
    Wyskakuje komunikat:
    Cytuj:
    [dcc32 Error] Unit1.pas(232): E2076 This form of method call only allowed for class methods or constructor


    @Marhef, chętnie poznam sposób w jaki się to robi :)

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 21:20 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    Dziwne ja zawsze tak robię i mi działa.
    Na pewno dobrze przepisałeś bez litery "T" przed Form1?

    Co do metody która zaproponował Marhef,
    w zakładce zdarzeń różnych kontrolek wybierasz jedną i ta samą funkcję.
    Dopiero w funkcjach sprawdzasz co było przyczyną jej wywołania i wykonujesz odpowiedni kod np:
    Składnia: [ Pobierz ] [ Ukryj ]
    język delphi
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    W tym przykładzie pod zdarzenie od wciśnięcia przycisków Button2 i Button3 wybierasz funkcję obsługi zdarzenia od przycisku Button1 i dopiero w tej procedurze rozpoznajesz co wcisnąłeś.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 21:38 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1967
    Lokalizacja: Lipsko
    Pomógł: 125

    Aaaaa, właśnie z literą T było :)

    I teraz pięknie działa. Dzięki WIELKIE! :D

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 22:17 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27363
    Lokalizacja: Szczecin
    Pomógł: 1043

    Jak jesteś w ramach tej samej klasy TForm to wystarczy

    Składnia: [ Pobierz ] [ Ukryj ]
    język delphi
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Autor postu otrzymał pochwałę

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 08:03 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1967
    Lokalizacja: Lipsko
    Pomógł: 125

    No i proszę, ile to się okazało rozwiązań mojego skomplikowanego problemu :D. Dzięki.

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 14:44 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27363
    Lokalizacja: Szczecin
    Pomógł: 1043

    Pamiętaj jednak, że takie wywoływanie metod "luzem" może być niebezpieczne. O wiele lepiej od razu jest przyjąć zasadę, żeby w metodach ew wywoływać tylko funkcje. Zobacz ile to wtedy upraszcza ;) bo w dwóch czy iluś miejscach programu wywołujesz wtedy taką funkcję. To może szczególnie się później przydasz gdy np zmienisz w kodzie nazwę dla komponentu i nagle amba - będzie wiele miejsc do poprawki. Bo zamiast Edit7Change() będzie np edDataChange().

    Tzn jak tam raz gdzieś wywołasz - to nie ma co drzeć szat, ale tak podpowiadam na przyszłość że jak już częściej niż raz się robi, niż dwa - to ZDECYDOWANIE warto iść w napisanie funkcji.

    To będzie tym bardziej i to DRAMATYCZNIE potrzebne jak kiedyś sięgniesz po komponent do zarządzania listą akcji (a jak cię znam to szybko po niego sięgniesz) ;) ... wtedy żeby przerobić taki kod z ręcznym wywoływaniem metod - to będzie lepiej skoczyć z balkonu (ale nie na parterze) ;)

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 15:23 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1967
    Lokalizacja: Lipsko
    Pomógł: 125

    Masz rację Mirku. Już się tu zastanawiałem właśnie, że w pewnym momencie taka metoda może się zemścić, choć akurat nieco inny przypadek rozpatrywałem. Jednak w tym prostym programie, który obecnie skrobię poznaje dopiero pewne mechanizmy i będę ewentualne błędy i zgrzyty usuwał na bieżąco. Jak wiadomo człowiek uczy się nas błędach - lepiej się utrwali :)

    -- dzisiaj, o 16:23 --

    No dobra, a jak w takim razie obsłużyć (na tej zasadzie co powyżej) takie coś:

    Cytuj:
    procedure TForm1.Edit7KeyPress(Sender: TObject; var Key: Char);


    kompilator drze się o parametry, a ja nie mam już pomysłów co wstawić zamiast "var Key: Char" :(

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 19:19 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27363
    Lokalizacja: Szczecin
    Pomógł: 1043

    no ale co? znowu chcesz taką metodę wywoływać zewnętrznie ? - to już prawie skok w przepaść. Napisz może co chcesz uzyskać generalnie w tym konkretnym zakresie związanym z tą metodą to łatwiej może będzie podpowiedzieć coś.

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 19:24 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1967
    Lokalizacja: Lipsko
    Pomógł: 125

    Dałem sobie spokój, choć i tak chciałbym wiedzieć jak to zrobić :P :D
    Przerabiam teraz co się da na poszczególne funkcje i procedury. Po prostu gdy zaczynałem pisać program nie sądziłem, że tyle się tego nazbiera :).
    A chodziło mi o wstępne odświeżenie obliczeń i okienek przy starcie programu.
    Póki co dla mnie ten sposób programowania jest nowością i do pewnych rzeczy muszę się przyzwyczaić

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 20:06 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27363
    Lokalizacja: Szczecin
    Pomógł: 1043

    No ale wywołując taką metodę Edit7KeyPress() przy inicjalizacji programu doprowadzisz do sztucznego wciskania jakby przycisków, a jak jeszcze inne metody w tą inicjalizację wrzucisz to ci zrobi się mega cyrk na kółkach. Tak nie można. Tak jak pisałem wcześniej pisz zewnętrzne funkcje żeby je wywoływać w metodach.

    a wywołanie Edit7KeyPress( self, zmienna_char );

    ale jak mówię to już droga w odmęty szaleństwa ;)

    Składnia: [ Pobierz ] [ Ukryj ]
    język delphi
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Obrazek

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 20:16 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1967
    Lokalizacja: Lipsko
    Pomógł: 125

    Wszystko jasne z tym wywoływaniem. W pewnym momencie zorientowałem się że mi się program ...zapętli :)

    Pojawił się natomiast inny problem. Tu nawet deklaracje procedur chyba kompletnie inaczej działają niż w C...
    dopisałem na koniec programu procedurę (która wywoływana jest gdzieś wcześniej):
    Składnia: [ Pobierz ] [ Ukryj ]
    język delphi
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    ... i oczywiście drze się błąd. Mógłbym ją przenieść gdzieś wcześniej przed fragment programu gdzie jest wywoływana, ale to obejście mi się nie podoba, bo robi mi bajzel w programie (lubię po swojemu kolejność bloków ustalać). Kiedy próbowałem przenieść nagłówek do sekcji deklaracji na początku programu to oczywiście tam mi się znowu podświetla, że coś nie tak. W C nie było z tym problemu. Przeglądam poradniki w necie i nikt się tam nawet nie zająknie na ten temat - przykłady tam podane są proste i po prostu działają uwzględniając zasadę, że procedura jest umieszczona gdzieś przed jej wywołaniem (co ją przecież z urzędu deklaruje).
    Jak to można obejść. Byłoby nielogiczne gdyby się nie dało.

    -- 23 minutach --

    Ufff. Doszedłem jak to zrobić :) - te swoje trzeba wstawiać poza Form1 :)

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 20:43 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    Ale dlaczego inaczej?
    Jak w C napiszesz procedurę na końcu pliku, bez jej wcześniejszej deklaracji i spróbujesz ją wcześniej wywołać to co, kompilator Ci na to pozwoli?
    Tu jest tak samo, od tego jest sekcja interface. Czyli odpowiednik pliku nagłówkowego .h, (deklaracje).
    Sekcja implementation - to odpowiednik pliku .c, (definicje).

    -- 2 minutach --

    SylwekK napisał(a):
    te swoje trzeba wstawiać poza Form1

    Niekoniecznie.

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język delphi
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Ostatnio edytowano 11 kwi 2021, o 20:54 przez auers, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 20:49 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1168
    Lokalizacja: Kraków
    Pomógł: 93

    mirekk36 napisał(a):
    Pamiętaj jednak, że takie wywoływanie metod "luzem" może być niebezpieczne. O wiele lepiej od razu jest przyjąć zasadę, żeby w metodach ew wywoływać tylko funkcje. Zobacz ile to wtedy upraszcza ;) bo w dwóch czy iluś miejscach programu wywołujesz wtedy taką funkcję. To może szczególnie się później przydasz gdy np zmienisz w kodzie nazwę dla komponentu i nagle amba - będzie wiele miejsc do poprawki. Bo zamiast Edit7Change() będzie np edDataChange().

    Tzn jak tam raz gdzieś wywołasz - to nie ma co drzeć szat, ale tak podpowiadam na przyszłość że jak już częściej niż raz się robi, niż dwa - to ZDECYDOWANIE warto iść w napisanie funkcji.
    Mirku, rozumiem, że wywoływanie metod z innych metod jest nielogiczne.
    A co z przypisaniem jednej metody do kilku zdarzeń (jak proponuje kolega auers)? Przykładowo, mam program w którym mam klawiaturę numeryczną i po kliknięciu w przycisk jego wartość wyświetla się w jakimś okienku. Lepiej napisać 10 metod, w których każda będzie działać tak samo, czy przypisać jedną metodę do wszystkich przycisków i w niej wykrywać, który przycisk jest wciśnięty? I czy po zmianie nazwy metody w pliku programu nie zmieni się jej nazwa w zdarzeniach, do których jest przypisana?
    I czy dobrym zwyczajem jest tworzenie takich konstrukcji (zakładam, że w Edit1 chcę wyświetlić tylko numer ostatnio wciśniętego przycisku, a przyciski mają nazwy "buttonx", gdzie x=0..9)
    Składnia: [ Pobierz ] [ Ukryj ]
    język delphi
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Pytanie głównie do Mirka, ale innych też zapraszam do wypowiedzi :)

    Dodam jeszcze, że do tej pory korzystałem z programu Lazarus (bo nie miałem wyboru), ale obstawiam, że w delphi będzie to działało bardzo podobnie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 20:55 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1967
    Lokalizacja: Lipsko
    Pomógł: 125

    To zapytam jeszcze :) gdzie można skonfigurować okienko wywoływane przez ShowMessage? Jest trochę za duże i chciałbym go nieco zwęzić :)


    PS. I może jeśli Mirek pozwoli i doda do tytułu tematu " i inne problemy początkującego" to bym już śmietnika nie robił z forum :)

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 21:09 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    Marhef napisał(a):
    I czy po zmianie nazwy metody w pliku programu nie zmieni się jej nazwa w zdarzeniach, do których jest przypisana?

    Niestety sama z automatu się nie zmienia, trzeba wszystkie zdarzenia przeklikać ręcznie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 21:33 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27363
    Lokalizacja: Szczecin
    Pomógł: 1043

    Marhef napisał(a):
    A co z przypisaniem jednej metody do kilku zdarzeń (jak proponuje kolega auers)? Przykładowo, mam program w którym mam klawiaturę numeryczną i po kliknięciu w przycisk jego wartość wyświetla się w jakimś okienku. Lepiej napisać 10 metod, w których każda będzie działać tak samo, czy przypisać jedną metodę do wszystkich przycisków i w niej wykrywać, który przycisk jest wciśnięty? I czy po zmianie nazwy metody w pliku programu nie zmieni się jej nazwa w zdarzeniach, do których jest przypisana?

    Ale kolega auers dobrze napisał bo podmiana metod to całkiem co innego niż to co tu Sylwek jakby próbuje robić, więc to co piszesz tutaj jest ok.

    Marhef napisał(a):
    I czy dobrym zwyczajem jest tworzenie takich konstrukcji

    Ale tu już pełna dowolność, kreatywność i własne pomysły - są jak najbardziej ;)

    SylwekK napisał(a):
    gdzie można skonfigurować okienko wywoływane przez ShowMessage? Jest trochę za duże i chciałbym go nieco zwęzić

    To jest okienko wywoływane z API, takie najbardziej standardowe i nie ma co tam zawężać ;) ale jeśli chce ci się rzeźbić to zawsze można tworzyć swoje własne okienka informacyjne jako oddzielne formy w aplikacji. Tyle że dla standardowych i krótkich komunikatów szybko sam z tego zrezygnujesz.

    Można nieco konfigurować takie okienka np w ten sposób o ile dobrze pamiętam z głowy:

    Składnia: [ Pobierz ] [ Ukryj ]
    język delphi
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO