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 19 maja 2025, o 03:41


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 4 lut 2015, o 17:56 
    Offline
    Użytkownik

    Dołączył(a): 31 sie 2014
    Posty: 135
    Lokalizacja: Racibórz (okolice)
    Pomógł: 0

    Witam szanowne koleżanki i kolegów!

    Mam sobie projekt malutki w Builder C++, który ma opierać się na gotowcu napisanym w C...
    Na formie mam komponent MEMO i chciałbym w nim wyświetlać komunikaty, które w oryginalnym kodzie są wyświetlane w konsoli poprzez printf():

    Kod:
    void lcd_set(unsigned char cmd, int value) {
      if(usb_control_msg(handle,
            USB_TYPE_VENDOR, cmd, value, 0,
            NULL, 0, 1000) < 0) {
        printf(stderr, "USB request failed!");
      }
    }


    Jeśli zamiast printf wpiszę Memo1->Lines->Add to dostaję błąd Undefinied Symbol 'Memo1'.

    Jak można to przerobić żeby można było do memo wpisywać to co printf wyświetla w konsoli?

    BC++ jest podobny do Delphi tylko z wyglądu, widzę, że wiele rzeczy jest inaczej zrobionych, chociaż same VCL są identyczne.... W Delphinku po prostu zadeklarowałbym sobie jakąś funkcję, a tutaj niby ona już jest, ale nie chce współpracować.
    Ps. wiem, za mało chlebka zjadłem jeśli chodzi o C.
    Ps2 proszę o wędkę a nie o rybkę :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 lut 2015, o 18:19 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 maja 2014
    Posty: 317
    Pomógł: 19

    Hmm.. Nie wychodzi Tobie takie coś?

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


    Pozdrawiam! j23 Jarek

    _________________
    "O sygnałach bez całek" Czesław Frąc



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 lut 2015, o 18:30 
    Offline
    Użytkownik

    Dołączył(a): 31 sie 2014
    Posty: 135
    Lokalizacja: Racibórz (okolice)
    Pomógł: 0

    No właśnie nie. Zupełnie jakby nie wiedział co to jest Memo1...
    Ale jak wpiszę to w zdarzenie onclick buttona to już wtedy rozpoznaje Memo...

    Chyba nie ma znaczenia w którym miejscu w kodzie (czy w zdarzeniu obiektu czy w procedurce C) odwołuję się do komponentu, skoro przecież jest poprawnie utworzony (przeciągnięty na formularz)???



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 lut 2015, o 18:39 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 maja 2014
    Posty: 317
    Pomógł: 19

    Nie ma znaczenia w którym miejscu odwołujesz się do komponentu, ale zmienna obiektowa Memo musi zostać przekazana do funkcji, jeśli to Memo jest wywoływane z jakiejś tam funkcji.

    Hmm... Pokaż przykład jak chcesz użyć Memo. Wklej ten kod, bo tu co podałeś tego nie widać.
    Acha.. Na formularzu masz to Memo umieszczone, tak?

    Pozdrawiam! j23 Jarek

    ------------------------ [ Dodano po: 8 minutach ]

    Jeszcze taka sprawa..
    Jeśli odwołujesz się do Memo z jakiejś tam zewnętrznej (tzn. swojej własnej funkcji) to ta funkcja powinna wyglądać tak:

    Plik nagłówkowy (*.h):
    Składnia: [ Pobierz ] [ Ukryj ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


    Pozdrawiam! j23 Jarek


    Autor postu otrzymał pochwałę

    _________________
    "O sygnałach bez całek" Czesław Frąc



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 lut 2015, o 19:00 
    Offline
    Użytkownik

    Dołączył(a): 31 sie 2014
    Posty: 135
    Lokalizacja: Racibórz (okolice)
    Pomógł: 0

    tak, na formie mam memo1 i button'a.

    W onclick button'a wszystko jest OK, ale jak mam coś takiego:

    Kod:
    #include <vcl.h>
    #include <iostream>
    #pragma hdrstop
    #include "Unit1.h"

    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;

    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }

    #include <stdio.h>
    ...

    void lcd_get_keys(void) {
      int keymask = lcd_get(LCD_GET_KEYS);

      if(keymask != -1)
        printf("Keys: 0:%s 1:%s\n",
          (keymask&1)?"on":"off",
          (keymask&2)?"on":"off");
    }

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    ... <- Tutaj wszystko działa OK, czyli Memo1->Lines->Add("cośtam");
    }

    }


    i chcąc zamienić printf("Keys....."); na Memo1->Lines->Add("Keys..."); czyli:

    Kod:
    void lcd_get_keys(void) {
      int keymask = lcd_get(LCD_GET_KEYS);

      if(keymask != -1)
        Memo1->Lines->Add("Keys: 0:%s 1:%s\n",
          (keymask&1)?"on":"off",
          (keymask&2)?"on":"off");
    }


    dostaję błąd:
    Kod:
    [C++ Error] Unit1.cpp(245): E2451 Undefined symbol 'Memo1'


    W sumie, próbując w tej procedurce dopisać w Memo1 powoduje wystąpienie błędu.

    Wiem, mieszam, ale nie wiem jak to inaczej prościej napisać/opisać/przedstawić ;/

    ------------------------ [ Dodano po: 15 minutach ]

    Dobra, mam już :D

    Skoro nie mogę w funkcji wpisać nic do Memo, to mogę zwrócić jej wynik poprzez return.
    A samą funkcję można wywołać poprzez Memo1->Lines->Add(nazwa_funkcji());

    I to mi zadziałało.

    Edit2: Na pewno wykorzystam Twoje wskazówki. Dzięki! :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 lut 2015, o 19:20 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 maja 2014
    Posty: 317
    Pomógł: 19

    Hmm...

    Po pierwsze tak:
    Tam w Bcb masz okienko object inspector i dalej zakładka events. Jak zaznaczysz komponent Memo i przejdziesz na zakładkę events to wtedy pojawią Ci się w object inspectorze różne funkcje składowe (właściwie są to zdarzenia) jakie mogą wystąpić w Memo.
    Są tam m.in. takie zdarzenia (events):
    - OnKeyUp -> gdy klawisz zostanie podniesiony ze stanu wciśniętego
    - OnKeyPress -> gdy klawisz zostanie wciśnięty i puszczony
    - OnKeyDown -> gdy klawisz zostanie wciśnięty i jest trzymany

    Acha.. No i klikając dwa razy na któreś ze zdarzeń dodajesz sobie funkcję, która będzie się uaktywniała, gdy np. wciśniesz klawisz chcąc coś wpisać do Memo (wtedy będzie to zdarzenie OnKeyDown). Po dwukrotnym kliknięciu masz już tą funkcję w pliku źródłowym, no i wpisujesz w jej ciało co ona ma dokładnie robić, co ma przetwarzać, itd. To znaczy po kliknięciu dwa razy w zakładce events na np. OnKeyDown powinieneś otrzymać w pliku źródłowym taką funkcję:
    Składnia: [ Pobierz ] [ Ukryj ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Jeszcze jedna rzecz!
    Klawisze jakie możesz wychwycić za pomocą VK_<klawisz> -> tak jak u góry masz przykład wychwycenia klawisza ENTER (nie wiem czemu Borland użył przedpotopowej nazwy RETURN pamiętającej jeszcze C64...).
    Te klawisze, których możesz użyć to:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język bash
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    To jest skopiowane z Help -> Tematy pomocy -> z wklepanego: "VK_" i wybranego tematu pomocy: "Virtual Key Codes".


    Druga sprawa, to to, że kiedy używasz Memo i wpisujesz coś do tego komponentu za pomocą Lines->Add, to nie używasz specyfikatorów formatowania (takich jak: %s, %d, etc.), bo tego wymaga tylko funkcja printf w C.
    Jeśli chcesz podać jakąś zmienną do funkcji Add (Memo) to podajesz ją m.in. w ten sposób:
    Składnia: [ Pobierz ] [ Ukryj ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Polecam:
    Help -> Tematy pomocy -> znajdź i wklep np. OnKeyUp
    taką stronkę:
    http://programowanie.cal.pl/cyfbar/
    i forum Borland C++ Builder Cyfrowego Barona, gdzie można sporo znaleźć:
    http://programowanie.cal.pl/forum/index.php

    Pozdrawiam! j23 Jarek

    _________________
    "O sygnałach bez całek" Czesław Frąc



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 lut 2015, o 20:10 
    Offline
    Użytkownik

    Dołączył(a): 31 sie 2014
    Posty: 135
    Lokalizacja: Racibórz (okolice)
    Pomógł: 0

    dzięki J23 :)

    powoli zaczynam ogarniać te różnice pomiedzy C++ a Delphinkiem. Jeśli chodzi o VCL i to co z nimi związane, to to znam od dawna. Główną trudność stanowi dla mnie to, że Borland C++ ma np. -> zamiast kropki. Albo String costam; a nie string costam; <0 czyli wielkość znaków jest ważna, w delphi tego nie było.
    W Delphi ogarniałem całe aplikacje bazodanowe, a tu mam problem z podstawami.... które są identyczne tu i tu. Aż smutne :(
    Interface środowiska IDE jest mi znany od podszewki. Jest identyczny jak u brata Delphinka ;)

    Dzięki za cenne wskazówki :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 lut 2015, o 20:47 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 maja 2014
    Posty: 317
    Pomógł: 19

    Shiro napisał(a):
    dzięki J23 :)
    (...)
    Nie ma sprawy. ;)
    Jest jeszcze taka książka, jakbyś ją mógł dorwać w jakiejś bibliotece albo gdzieś:
    "C++ Builder 6 i bazy danych", autor: Marian Wybrańczyk
    Obrazek

    Wbrew pozorom nie jest ona tylko o bazach danych, ale o różnych innych ciekawych sprawach także jak np. biblioteki DLL.

    Pozdrawiam! ;) j23 Jarek

    _________________
    "O sygnałach bez całek" Czesław Frąc



    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: 8 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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


    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