Jak powiązać RadioGroup z Memo

Jak powiązać RadioGroup z Memo
PR
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

Witam wszystkich bardzo serdecznie :) Otóż piszę program do pikietażu - kilometrażu dróg pod C++Builder 6. Jego forma wstępnie tak:

user image

W momencie wyboru drogi z ComboBox program wczytuje do RadioGroup i Memo plik tekstowy o składni następującej:

Kopiuj
37,4 - 41,8 km=Powiat Zgierski
41,8 - 362,9 km=Miasto Łódź
362,9 - 382 km=Powiat Łódzki Wschodni
399,8 - 416,1 km=Powiat Piotrkowski
416,1 - 447,5 km=Powiat Radomszczański
>> 447,5 km=Województwo Śląskie - Kierunek Częstochowa

I teraz mam problem jak rozwiązać kwestię wyboru z RadioGroup, gdyż lista kilometrów jest różna dla różnych dróg i w momencie wyboru właściwego kilometra chciałbym, aby w Memo lub nawet Label był wyświetlany dany powiat, a nie cała lista.

Kod wygląda tak:

Uni1.h

Kopiuj
private:	// User declarations
        THashedStringList *Lista;

Unit1.cpp

Kopiuj
void __fastcall TForm1::ComboBox3Select(TObject *Sender)
{
        //co zrobimy po wybraniu z listy dróg krajowych z ComboBox
        if (ComboBox3->ItemIndex == 0)
        {
                String sFileName = ExtractFilePath(ParamStr(0)) + "dat\\kraj1pik.dat";

                if(!FileExists)
                {
                        Application->MessageBox(("Nie odnaleziono pliku '" + ExtractFilePath(ParamStr(0)) + "dat\\kraj1pik.dat'!").c_str(), "Uwaga! Brak pliku", MB_OK | MB_ICONSTOP);
                        RadioGroup1->Items->Clear();
                        Memo1->Clear();
                        return;
                }

                Lista = new THashedStringList;
                Lista->LoadFromFile(sFileName);

                RadioGroup1->Items->Clear();
                Memo1->Clear();

                for(int i = 0; i < Lista->Count; i++)
                {
                        RadioGroup1->Items->Add(Lista->Names[i]);
                        Memo1->Lines->Add(Lista->Values[Lista->Names[i]]);
                }
                delete Lista;
        }
}

Byłbym wdzięczny za każdą pomoc :)

edytowany 2x, ostatnio: Przemyslav
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:14 dni
1

Każdy z wierszy w Items dla TRadioGroup ma RadioGroup1->Items->Objects[i]; pod który możesz podpięć na przykład napis.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Rekman
Pod warunkiem, że napis dziedziczy po TObject
_13th_Dragon
Nie koniecznie, możesz tam wsadzić zwykłego int'a lub nawet static_castze zwykłego char*
Rekman
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 10 lat
  • Postów:148
1

Listę twórz w konstruktorze formy i usuwaj w destruktorze.
Zmień funkcjię ComboBox3Select() (i podobnie pozostałe obsługujace ComboBoxy):

Kopiuj
//...
 
                Lista->Clear();//Lista = new THashedStringList;<--- ZMIANA (TO RAZ W KONSTRUKTORZE)
                Lista->LoadFromFile(sFileName);
 
                RadioGroup1->Items->Clear();
                Memo1->Clear();
 
                for(int i = 0; i < Lista->Count; i++)
                {
                        RadioGroup1->Items->Add(Lista->Names[i]);
                       // Memo1->Lines->Add(Lista->Values[Lista->Names[i]]);;<-- NIE TERAZ
                }
                //delete Lista; <-- NIE TU (W DESTRUKTORZE FORMY)
        } 

Dodaj funkcję RadioGroup1Click():

Kopiuj
Memo1->Clear();
    Memo1->Lines->Append(Lista->Values[Lista->Names[RadioGroup1->ItemIndex]]);
PR
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

Dziękuję pomogło :) Jesteście wielcy :) !!!

S8
  • Rejestracja:około 8 lat
  • Ostatnio:około 8 lat
  • Postów:17
0
Rekman napisał(a):
Kopiuj
Dodaj funkcję RadioGroup1Click():
```cpp
Memo1->Clear();
    Memo1->Lines->Append(Lista->Values[Lista->Names[RadioGroup1->ItemIndex]]);

Mam zapytanie dotyczące tej zacytowanej linijki kodu. Jak ją przekodować z C++ na Pascal/Delphi. Mam dla Labela:

Kopiuj
powiat.Caption := Lista.Values[Lista.Names[RadioGroup1.ItemIndex]];

Jednak wyrzuca mi error typu: unit1.pas(7804,63) Error: Incompatible type for arg no. 1: Got "LongInt", expected "AnsiString". Czy dobrze przetłumaczyłem?

edytowany 2x, ostatnio: Slowik86

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.