x-kom hosting

Problem z C++ Builder 6

Kremius
komentarz
komentarz

Jeszcze jedno, czy można wyrównać tekst w komponencie TEdit np. do środka?

leggo
komentarz
komentarz

W standardowej kontrolce raczej nie.

Ja, przynajmniej, z czymś takim się nie spotkałem.

  • 1 miesiąc później...
Kremius
komentarz
komentarz (edytowane)

Słuchaj mam jeszcze jedną prośbę. Potrzebuje wiedzieć jak załadować wszystkie sekcje z pliku INI do komponentu, np. ComboBox..

 

 

Z góry dzięki za szybką odpowiedź

 

Jakbyś mi mógł napisać jak (i czy w ogóle) można zrobić wyszukiwanie sekcji po danej podsekcji (np. sekcja samochód i wyszukuje 'model' i wypisuje inne dane, z sekcji w której zostanie znaleziony ten właśnie 'model')

Edytowane przez Kremius
leggo
komentarz
komentarz

Do pobrania nazw wszystkich sekcji w pliku służy metoda [b]ReadSections[/b], natomiast sprawdzić czy w wybranej sekcji istnieje dana podsekcja możesz za pomocą metody [b]ValueExists[/b].

Kremius
komentarz
komentarz

Czyli w ValueExists podaje nazwę podsekcji, czy jej wartość? Mógłbyś podać jakiś prosty przykład?

leggo
komentarz
komentarz
if(plik->ValueExists("sekcja", "klucz"))
{
   //w podanej sekcji istnieje podsekcja o nazwie "klucz"
}
Kremius
komentarz
komentarz

Chodziło mi o coś takiego, mam 3 RadioButtony (np. Marka, model, wersja). Zaznaczam model i wpisuje w miejsce wyszukiwarki, np. Punto II, a program uzupełnia mi resztę danych, np. Marka - Fiat, wersja - SX, albo coś innego

Da radę zrobić coś takiego?


Mam jeszcze jedno pytanie, czy można zrobić tak, ze mając LIstBox żeby w polach Edit1, Edit2, Edit3, pokazywały się różne informacje w zależności nad którą pozycją będzie myszka?

leggo
komentarz
komentarz

1. Oczywiście, że można coś takiego zrobić. To o czym była już tutaj mowa wystarczy Ci by takie wyszukiwanie zrobić.

 

2. Do sprawdzenia, nad którą pozycją listbox-a znajduje się kursor, służy metoda [b]ItemAtPos(const TPoint & Pos, bool Existing)[/b].

Żeby zrobić to tak, jak chciałeś wystarczy, że stworzysz dla listbox-a event [b]OnMouseMove[/b], w nim stworzysz obiekt typu [b]POINT[/b], przypiszesz do niego adres kursora przekazany na wejściu i przekażesz go do w/w metody.

Gdy już będziesz miał indeks obiektu z listy, będziesz mógł wpisać odpowiedni tekst do pól edit. 

Kremius
komentarz
komentarz

Mógłbyś podać jakiś przykład. Np. mam kursor nad indeksem 2 i funkcja ma wpisać dowolne znaki do Edit1.

 

Sorka, za tą prośbę, lecz lepiej rozumiem coś jeśli zobaczę przykład.

leggo
komentarz
komentarz

Przesłanie indeksu obiektu z listy, nad którym znajduje się kursor, do polo edit:

POINT pK;
pK.x = X;
pK.y = Y;
Edit1->Text = ListBox1->ItemAtPos(pK, true);
Kremius
komentarz
komentarz (edytowane)

Zrobiłem coś takiego:

        AnsiString Sekcja;
        int Index=ListBox1->ItemAtPos(Point(X,Y),true);
        ListBox1->ItemIndex=Index;
        Sekcja=ListBox1->Items->Strings[ListBox1->ItemIndex];

        LabeledEdit1->Text=plik->ReadString(Sekcja, "adres", "brak danych");
        LabeledEdit2->Text=plik->ReadString(Sekcja, "numer", "brak danych");
        LabeledEdit3->Text=plik->ReadString(Sekcja, "dzielnica", "brak danych"); 

Założenie tego jest takie, że ma pokazywać określone dane każdej sekcji w piku ini (nazwa sekcji jest pobierana gdy myszka znajduje się nad jakąś pozycją w ListBox). Ogólnie działa normalnie, lecz jest mały problem. Kiedy wyjadę myszką poza elementy w ListBox'ie np. niżej niż są elementy (może być np 10 bez przemijania, ja mam 3 i zjadę na "4", który normalnie nie istnieje - nie został jeszcze stworzony) wyskakuje mi błąd, List index out of bounds (-1).

 

Można to jakoś naprawić

Edytowane przez Kremius
leggo
komentarz
komentarz

Zmień drugi parametr metody [b]ItemAtPos[/b] na [i]false[/i].

Kremius
komentarz
komentarz (edytowane)

Nie za każdym razem lecz problem wciąż występuje. Tym razem zamiast -1 jest 3

Edytowane przez Kremius
leggo
komentarz
komentarz

Błąd występuje, ponieważ w momencie przesunięcia kursora poza pozycje znajdujące się na liście metoda [b]ItemAtPos[/b] zwraca wartość z poza zakresu [b]Strings[/b].

Żeby sobie z tym poradzić, zmień ponownie drugi parametr [b]ItemAtPos[/b] na [i]true[/i] oraz przed linią nr 4 wstaw if-a (obejmującego sobą całą resztę podanego kodu) sprawdzającego czy wartość zmiennej [b]Index[/b] nie jest mniejsza od 0.

Dodatkowo 3. linia jest niepotrzebna. Usuń ją, a w nawiasie klamrowym, w linii 4. wstaw po prostu zmienną [b]Index[/b].

Kremius
komentarz
komentarz

No dobra. Jeśli będzie mniejsza to co ma program robić?

leggo
komentarz
komentarz

Jeśli wartość zmiennej [b]Index[/b] jest mniejsza od zera, to znaczy że kursor nie wskazuje aktualnie żadnej pozycji z listy.

Możesz wtedy np. czyścić zawartość labelededit-ów, lub nie robić nic.

  • 2 tygodnie później...
Kremius
komentarz
komentarz

Już jakoś to ogarnąłem.


Słuchaj mam taką sprawę czy jest możliwość skompilowania tak programu aby przerobić go na APK. Lub czy możesz mi pomóc ze zrobieniem prostej bazy danych na androida (bardzo mi to potrzebne)....

leggo
komentarz
komentarz

Borland [b]C++[/b] Builder służy do tworzenia programów w C++.

  • 1 rok później...
Kremius
komentarz
komentarz

Mam do Ciebie jeszcze jedno pytanie. Potrzebuje zrobić aplikację, która ze ścieżki sieciowej (komputery w domenie) będzie instalowała wybrane (zaznaczone CheckBoxem) aplikacje w domyślnych ścieżkach.

 

Czy w C++ Builderze da radę coś takiego ogarnąć ??

Najlepiej jakby nie pokazywało okien instalatora każdej aplikacji a jedynie pasek postępu całości, oraz jakby dało radę wprowadzić w nią klucz do Office (czy też innej aplikacji jeśli wymaga) na początku (i tylko jeśli zaznaczę office do instalowania) ??

 

Z góry dzięki za odpowiedź

 

 

Potrzebuje tego rozwiązania do biura...

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.