Przeglądarka płyty CD

Sebek

Na pewno wielu z was chciało napisać przeglądarkę płyty CD taką jak mają różne czasopisma np. Chip, Enter, Cd Action. Ostatnio kilka razy zadawano na forum pytanie jak napisać taki program. Nie będzie to strasznie trudne zadanie, myślę, że nie napotkacie w nim jakiś trudnych zagadnień. Już jakiś czas temu miałem napisać ten artykuł jednak zapomniałem sobie o nim całkowicie. Dziś, kiedy zacząłem pisać program do obsługi CD 4programmers, przypomniało mi się o tym artykule. Nie będę umieszczał źródeł tego programu na serwerze 4programmers, gdyż, najprawdopodobniej na serwerze zostaną umieszczone źródła programu do obsługi płyty 4p, a z tych źródeł będzie można wyciągnąć sobie moduł CD browser'a. Życzę miłej lektury.

Pierwszą czynnością, jaką powinniśmy wykonać (poza uruchomieniem Delphi) to przygotowanie pliku ini. W moim przypadku będzie to plik files.ini. Budowa pliku powinna być następująca:

[Nazwa pierwszego programu]
opis=opis pierwszego programu 
path=sciezkadopierwszegoprogramu

[Nazwa drugiego programu]
opis=a opis drugiego programu
path=sciezkadodrugiegoprogramu

[trzeci program]
opis=a ten jest tak sobie :) nie wiem po co go dałem ale jest :)
path=programysuperexenajnowszejeszczenowszemoj.exe

Teraz wrzucamy na formę kilka komponentów. Będą to:

  • TListBox - nazwa: ListBox1
  • TMemo - nazwa: Memo1
  • TButton - nazwa: Button1
    Aby program był bardziej elegancki możemy właściwość Memo1 - ReadOnly (tylko do odczytu) ustawić na True. Teraz będziemy musieli troszkę popisać (Ew. powklejać). Do <b>uses</b> dodajemy ShellAPI, INIFiles. W zdarzeniu oncreate formy wczytamy wszystkie sekcje z pliku files.ini do listboxa. Jeśli nam się to uda kod powinien wyglądać mniej więcej tak:
procedure TFormLauncher.FormCreate(Sender: TObject);
begin
  INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'files.ini'); //create files.ini :)
  INI.ReadSections(ListBox1.Items); // wczytaj sekcje z files.ini do ListBox1
end;

Delphi w tej chwili programu nie skompiluje, gdyż nie wie co to jest INI. Musimy mu to "powiedzieć" - aby to zrobić dodaj do sekcji PRIVATE w twoim projekcie taki kod:

  INI: TINIFile;

Nie należy zapominać o zwolnieniu pamięci. Do zdarzenia OnDestroy dopisujemy:

INI.Free;

Możesz teraz uruchomić program. Zapewne zauważyłeś, że do listbox wczytały sekcje z naszego pliku ini. Teraz musimy zmusić program, aby po kliknięciu na dany item w listboxie wyświetlił klucz o nazwie opis z danej sekcji. Możesz teraz spróbować taki kod napisać, jeśli nie możesz to będzie wyglądał on tak (dodaj do ListBox1.OnClick):

sciezka := ExtractFilePath(Application.ExeName)+INI.ReadString(ListBox1.Items[ListBox1.ItemIndex], 'path', ''); // przypisz do zmiennej sciezka, ścieżkę do programu z files.ini
MemoDesc.Text := INI.ReadString(ListBox1.Items[ListBox1.ItemIndex], 'opis', ''); // dodaj do memo klucz z zaznaczonej sekcji w listbox

Do sekcji private należy dopisać

  sciezka: string;

Teraz nasz program odczytuje listę programów dostępnych w "bazie", odczytuje opis programu wybranego przez nas, ale jeszcze czegoś brakuje... tak większość przeglądarek płyt pozwala na uruchomienie aplikacji. Nie bez powodu po kliknięciu na ListFiles do zmiennej sciezka jest przypisywana ścieżka z pliku files.ini. Dzięki niej teraz możemy uruchomić wybraną przez nas aplikację. W zdarzeniu OnClick Buttona wstaw ten kod:

if FileExists(sciezka) then 
  WinExec(Pchar(sciezka), SW_NORMAL) //uruchom plik do którego ścieżka jest w zmiennej sciezka
else
  Application.MessageBox('Program nie może odnaleźć wywoływanego pliku.', 'Twoja nazwa Przeglądarki :)', MB_OK or MB_ICONERROR);

Wytłumaczyć można to następująco: jeśli istnieje plik do którego ścieżka jest przypisana w zmiennej sciezka to, wtedy uruchom program ze zmiennej sciezka, jeśli natomiast plik ten nie istnieje wyświetl błąd. To wszystko nasza przeglądarka powinna działać bez zarzutów. Teraz możesz zabrać się za jej upiększanie i dodawanie nowych opcji. Nasza przeglądarka nadaje się raczej do płyt z programami, chociaż nic nie stoi na przeszkodzie aby dodać moduł odtwarzania plików multimedialnych, czy obsługi zipów.

Mam nadzieję, że ten artykuł pomógł, Ci w napisaniu przeglądarki. Wszelkie uwagi proszę zgłaszać na e-maila, gg, tlen, irc, lub gdzie wolisz. Proszę także o komentarze do artykułu

Na koniec chciałbym przeprosić redakcje wszystkich magazynów, do których za jakiś czas zaczną napływać nowe wersje przeglądarek ich płyt. Ja nie biorę odpowiedzialności za to co Oni napiszą ja tylko naprowadzam na trop.

Pozdrawiam, Wasz Sebek. :)

Listing

```delphi unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellAPI, INIFiles, StdCtrls;

type
TForm1 = class(TForm)
ListBox1: TListBox;
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
INI: TINIFile;
sciezka: string;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if FileExists(sciezka) then
WinExec(Pchar(sciezka), SW_NORMAL) //uruchom plik do którego ścieżka jest w zmiennej 'sciezka'
else
Application.MessageBox('Program nie może odnaleźć wywoływanego pliku.', 'Nazwa Twojej Przeglądarki :)', MB_OK or MB_ICONERROR);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'files.ini'); //create files.ini :)
INI.ReadSections(ListBox1.Items); // wczytaj sekcje z files.ini do ListFiles
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
INI.Free;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
sciezka := ExtractFilePath(Application.ExeName)+INI.ReadString(ListBox1.Items[ListBox1.ItemIndex], 'path', ''); // przypisz do zmiennej sciezka, ścieżkę do programu z files.ini
Memo1.Text := INI.ReadString(ListBox1.Items[ListBox1.ItemIndex], 'opis', ''); // dodaj do memo klucz z zaznaczonej sekcji w listbox
end;

end.

<!-- Coldpeerze, nie irytuj się -->

YETIX94:

Kod został poprawiony. :)

13 komentarzy

mam problem nie mogę uruchomić aplikacji w tej przeglądarce

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellAPI, INIFiles, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
ListBox1: TListBox;
Memo1: TMemo;
Button1: TButton;
HotKey1: THotKey;
ListBox2: TListBox;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
INI: TINIFile;
sciezka: string;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if FileExists(sciezka) then
WinExec(Pchar(sciezka), SW_NORMAL) //uruchom plik do którego ścieżka jest w zmiennej sciezka
else
Application.MessageBox('Program nie może odnaleźć wywoływanego pliku.', 'CDB :)', MB_OK or MB_ICONERROR);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'CDB.ini'); //create files.ini :)
INI.ReadSections(ListBox1.Items); // wczytaj sekcje z files.ini do ListFiles
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
INI.Free;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
sciezka := ExtractFilePath(Application.ExeName)+INI.ReadString(ListBox1.Items[ListBox1.ItemIndex], 'sciezka', ''); // przypisz do zmiennej sciezka, ścieżkę do programu z files.ini
Memo1.Text := INI.ReadString(ListBox1.Items[ListBox1.ItemIndex], 'opis', ''); // dodaj do memo klucz z zaznaczonej sekcji w listbox
end;

end.

a ini to
[CDB]
opis=mmm
sciezka=C:\Documents and Settings\Administrator\Moje dokumenty\Nowy folder (4)\Project1.exe

[pm]
opis=mmmhjgj
sciezka=C:\Program Files\Internet Explorer\IEXPLORE.EXE

wystarczy dodać ten ini do zasobów / na koniec exeka

interesujace w rzeczy samej..ale fajnie by bylo zeby mozna bylo robic takim programikiem gotowe exeki z linkami do plikow na CD...

Dlaczego go lubisz? :)

lubie dział gotowce

A jak zrobić coś takiego żeby po zakończeniu tego programu otworzyło się okno windowsa z zawartością dysku np C

Taak
Nawet fajne!

^^ dzięki :))) działa na pewno :))) kilka usprawnień i przeglądarka chipa sie chowa :)))

ja dam 6 pkt. ___ choć jescze nie sprawdzałem jak to działa :P

A czemu nikt nie chce ocenić :P Az tak kijowy? :)))

samzes jest błe drajwer, chlopak sie postaral i napisal.... mi by sie nie chcialo i za to go podziwiam :D