Otwieranie plików zewnętrznych

0

Hejka. sorki mam dopiero 12 lat wiec sorka za pytania

  1. Jak z okna dialogowego OpenDialog otworzyć plik INI, jego sekcje wyświetlić w ComboBox. Docelowo chce wyświetlić wartości wybranych argumentów w Listboxie . Każda sekcja składa się z jednakowych argumentów A1,A2,B1,B2.o różnych wartościach Z zaznaczonej sekcji chce wyświetlić wartości argumentów A1 i A2.właśnie w listboxie.

tutaj coś źle mam tylko internet do dyspozycji

procedure TForm1.Button1Click(Sender: TObject);
var
  INI : TINIFile;
begin
  OpenDialog1.Execute;
     if OpenDialog1.FileName <> '' then
     INI := TINIFile.Create(OpenDialog1.FileName);
     INI.ReadSections(Listbox1.Items);
  end;
  1. Można w pliku Ini zrobić nad sekcje, czy pod sekcje chodzi mi o coś takiego
    Samolot
    - marka
    - typ

Samochód
- marka
- typ

Z tego co poczytałem idealny byłby xml ale za wysokie progi. Ale jak by się komuś chciało i miał czas to dla porównania jakby mógł pokazać jak zrobić to z xml, jak wyżej gdzie mamy prostą budowę, kilka sekcji równorzędnych cztery argumenty. Bardzo chciałbym takie porównanie zobaczyć, za każda pomoc mogę tylko podziękować.

2

Przede wszystkim nie tak się obsługuje OpenDialog. Standard to:

if openDialog.Execute() then
begin

end;

Kod w bloku begin..end zostanie wykonany, gdy użytkownik wciśnie "Otwórz" w dialogu. A wciśnie otwórz tylko wtedy, gdy wybierze plik. Czyli jeśli ten warunek będzie spełniony, to jednocześnie w openDialog.FileName będziesz miał poprawną ścieżkę do pliku.

Plik INI nadaje się do prostych zastosowań: klucz = wartość. Czyli:

[SAMOLOT]
marka=airbus
typ=taki latający
[SAMOCHÓD]
marka=Opel
typ=osobowy

Jeśli to Cię zadowala, to możesz do tego od biedy użyć plików INI. Chociaż lepszy byłby rejestr. W Delphi równie łatwy do ogarnięcia jak pliki INI. Jeśli potrzebujesz struktury drzewiastej, to wtedy pliki XML.

Rozumiem, że chcesz osiągnąć coś takiego:
w comboBox: {samolot, samochód}

W ListBox odpowiednia zawartość sekcji z ini {marka, typ}
a gdzieś tam jeszcze w jakimś edicie wartości (airbus, Opel itd...), tak?

Jeśli tak, to do ComboBoxa musisz pobrać zawartość sekcji - w taki sposób jak to robisz, tyle, że pobierasz do listboxa.
Następnie przy zmianie ComboBoxa, musisz odczytać jaka sekcja została wybrana (czyli po prostu ComboBox.Text) i wpisać w analogiczny sposób do ListBoxa klucze z tej sekcji. Klasa INI ma taką metodę jak ReadKeys chyba, w której przekazujesz sekcję.

A reszta no to już zwykły odczyt wartości z pliku ini.

1
supermen_nie_istnieje:

Jak z okna dialogowego OpenDialog otworzyć plik INI [...]

Pierwszym i bardzo powszechnym błędem jest twierdzenie, że jakiś plik można otworzyć z okna dialogowego. Otóż nie - okno dialogowe służy wyłącznie do pozyskania ścieżki lub nazwy pliku. Równie dobrze mógłbyś skorzystać z SaveDialog do pozyskania nazwy pliku. Albo z FindDialog czy PrinterSetupDialog - wystarczy mieć trochę wyobraźni, a przede wszystkim rozumieć jak działają te dialogi.

[...] jego sekcje wyświetlić w ComboBox.

Nic trudnego - to kilka linijek kodu. Podam przykładowe fragmenty, a Ty poskładaj sobie z nich kod. Poniżej kod służący do wybrania pliku za pomocą okna dialogowego oraz załadowanie jego zawartości do pamięci:

var
  Config: TIniFile;
begin
  if OpenDialog.Execute() then
  begin
    Config := TIniFile.Create(OpenDialog.FileName);

Poniżej przykład pobierania nazw wszystkich sekcji z pliku konfiguracyjnego i wrzucenie ich do ComboBox:

var
  Sections: TStringList;
begin
  Sections := TStringList.Create();
  try
    Config.ReadSections(Sections);
    ComboBox.Items.Assign(Sections);

Można to wykonać w jednej linijce, bez potrzeby używania dodatkowego obiektu:

Config.ReadSections(ComboBox.Items);

Z tego co poczytałem idealny byłby xml ale za wysokie progi.

XML to kombajn, mający 1000x większą funkcjonalność, niż to co jest Ci potrzebne. W zupełności wystarczą pliki INI.

Docelowo chce wyświetlić wartości wybranych argumentów w Listboxie .

Pamiętaj, że pliki INI posiadają swoją budowę i dobrze jest nazywać rzeczy po imieniu. Schemat jest prosty:

[sekcja]
klucz=wartość
klucz=wartość
[sekcja]
klucz=wartość
; itd. itd.

Jeśli potrzebujesz w ListBox wyświetlić wartości z sekcji, której nazwa wyświetlona jest w ComboBox, to wystarczy poniższa linijka:

Config.ReadSectionValues(ComboBox.Text, ListBox.Items);
0

Nie do moich pomysłów to nie wystarczy, xml nie wątpie ze kombajn ale na prostym przykładzie chciałbym zobaczyć jak to jest tu i tu ale sobie odpuszczę poczekam na konkretny przedmiot w szkole bo dałeś do myślenia z open dialog teraz to już nie wiem jak to w jedno nawet złożyć czy nawet jest sens z tego co piszesz, bo z pozycji programu potrafię go otworzyć,

0

Skoro INI posiadają zbyt małą funkcjonalność do "Twoich pomysłów" to użyj innego formatu.

0

@supermen_nie_istnieje

Jeśli potrzebujesz zapisać w pliku dowolną strukturę drzewiastą, to XML jest naprawdę dobrym rozwiązaniem .
Oczywiście można kombinować z plikami 'ini' ale to nie jest ani proste, ani dobre, ani elastyczne rozwiązanie .
Jeśli masz takie wymagania, to XML jest świetnym rozwiązaniem. Delphi ma niezłe narzędzia do obsługi XML-a .. klasa TXMLDocument, interface IXMLDocument i narzędzie "xmldatabinding" do budowy interfejsu do XML'a na podstawie przykładowego pliku XML albo "schemy"

0

Jejku proste pytania. po to chyba jest newbie skąd te teorie spiskowe ? nie chce pomóc nie odpowiadam to chyba logiczne

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