Jak powiązać RadioGroup z Memo

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:

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

private:	// User declarations
        THashedStringList *Lista;

Unit1.cpp

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 :)

1

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

1

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

//...
 
                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():

Memo1->Clear();
    Memo1->Lines->Append(Lista->Values[Lista->Names[RadioGroup1->ItemIndex]]);
0

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

0
Rekman napisał(a):
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:

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?

1 użytkowników online, w tym zalogowanych: 0, gości: 1