W listbox tylko nazwa pliku z dostępem do ścieżki pliku

0

Cześć
Potrzebuje pomocy od razu proszę o wybaczenie jeśli namieszam gdyż kod nie jest mój.
Nie wiem w czym co zmienić gdzie jest rozwiązanie.

Mam wczytywanie plików do Listboxa przez SelectDirectory i działa tak jak ma
czyli w Listboxie pokazuje się tylko nazwa pliku a do pliku konfiguracyjnego .txt za pomocą ButonClick dodaje się cała ścieżka to samo chce zrobić dodając pojedynczy plik do Listboxa przez **OpenDialog
**

if opendialog1.execute then
ListBox1.Items.Add(ExtractFileName(OpenDialog1.FileName));

Tak to nie działa gdyż do pliku konfiguracyjnego dodaje mi zawartość Liśtboxa a nie całą ścieżkę poniżej podam procedurę wczytywania plików przez SelectDirectory i malowania Listboxa

Może inaczej zadam pytanie
**Jak w Listboxie wyświetlać tylko nazwę pliku a do pliku konfiguracyjnego dodawać całą ścieżkę zawartą pod nazwą pliku w Listboxie.
**
Tak właśnie dzieje się wczytując pliki z wskazanego folderu dlatego dodaje jego procedurę poniżej taki sam efekt chcę uzyskać dodając pojedynczy plik przez OpenDialog

Dodawanie do Memo celem podglądu pliku konfiguracyjnego w Listbox 1 i 2 ma się pojawić ścieżka

procedure TForm2.ButtonPokazPlikClick(Sender: TObject);
var
  i: Integer;
begin
  i:= 0;
  while (i < ListBox1.Count) and(i < ListBox2.Count) do
  begin
    Form3.Memo1.Lines.Add(LabeledEdit1.Text+';'+ListBox2.Items[i]+';'+ListBox1.Items[i]);
    Inc(i);
  end;

A tu już wczytywanie przez** SelectDirectory**

procedure TForm2.ButtonWczytajClick(Sender: TObject);
var
  LDirectory: String;
begin
  if SelectDirectory('Select directory', 'C:', LDirectory) then
    ListFiles(IncludeTrailingPathDelimiter(LDirectory), ListBox1.Items);
end;
procedure ListFiles(const APath: String; AFilesList: TStrings);
var
  LFileRec: TSearchRec;
begin
  AFilesList.Clear();
  if FindFirst(APath + '*.txt', faAnyFile, LFileRec) = 0 then
    try
      repeat
        AFilesList.Add(APath + LFileRec.Name);
      until FindNext(LFileRec) <> 0;
    finally
      FindClose(LFileRec);
    end;
end;

i malowanie ListBoxa

procedure TForm2.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  Flags: Longint;
  Data: String;
begin
  self.ListBox1.canvas.FillRect(Rect);
  Flags := DrawTextBiDiModeFlags(DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX);
  Data := inttostr(index + 1) + ' : ' + extractfilename(self.ListBox1.Items[index]);
  DrawText(self.ListBox1.canvas.Handle, Data, Length(Data), Rect, Flags);
end;
0

Mam wczytywanie plików do Listboxa przez SelectDirectory i działa tak jak ma

SelectDirectory nie służy do wczytywania plików, a do wybierania katalogu i zwracania jego ścieżki!

Jak w Listboxie wyświetlać tylko nazwę pliku a do pliku konfiguracyjnego dodawać całą ścieżkę zawartą pod nazwą pliku w Listboxie.

Wyjaśnialiśmy Ci to w poprzednich Twoich kilku wątkach, więc wróć do nich i przeczytaj dokładnie co zostało podane;

Ogólnie ujmując, pełne ścieżki masz normalnie dodać do ListBox, do tego ustawić właściwość Style na lbOwnerDrawFixed, wygenerować zdarzenie OnDrawItem i w nim malować same nazwy plików; Mając pełne ścieżki w kontrolce, wystarczy je przepisać do pliku konfiguracyjnego.

0

Dla Ciebie to normalne a ja siedze przy tym tydzień, dla jednych to linijka kodu, a dla innych to nie przespane noce po co to newbiie ach mimo wszystko dziękuje

0

Pomoże ktoś?

0

Ogólnie ujmując, pełne ścieżki masz normalnie dodać do ListBox, do tego ustawić właściwość Style na lbOwnerDrawFixed, wygenerować zdarzenie OnDrawItem i w nim malować same nazwy plików; Mając pełne ścieżki w kontrolce, wystarczy je przepisać do pliku konfiguracyjnego.

Pomogłem już i powyższe jest rozwiązaniem Twojego problemu; Jeśli według Ciebie to nie jest pomoc to pisz wprost - "napisz mi kod tego zdarzenia, bo mi się nie chce uczyć, próbować i testować różnych rozwiązań."

Dla Ciebie to normalne a ja siedze przy tym tydzień, dla jednych to linijka kodu, a dla innych to nie przespane noce

Dla mnie to banał, dlatego że poświęciłem całe lata na naukę programowania - czytania dokumentacji, próbowania najróżniejszych rzeczy i pisania tysięcy testowych programików; Wiedza z nieba nie spada - żeby umieć, trzeba się uczyć.

0

Serce ja nie spędziłam lat na programowaniu zazdroszczę Ci , próbuje sama, kody są wyżej, chcesz pomóc proszę pomóż ale ja z dnia na dzień nie jestem wstanie ogarnąć połowy Delphi by znaleźć rozwiązanie, proszę się nie urażać i dziękuje za pomomoc

0

No to mała podpowiedź - mając w danej pozycji pełną ścieżkę pliku, aby namalować w kontrolce samą nazwę pliku, należy ją najpierw wydobyć za pomocą funkcji ExtractFileName, a później namalować w sposób standardowy (w zdarzeniu OnDrawItem rzecz jasna):

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState);
var
  LBox: TListBox absolute Control;
  LFileName: String;
begin
  LFileName := ExtractFileName(LBox.Items[Index]);
  LBox.Canvas.Draw(ARect.X + 4, ARect.Y + 2, LFileName);

Kod malujący tło już masz - kilka przydkładów podaliśmy Ci w poprzednim Twoim wątku, dotyczącym malowania tła pozycji w dwóch kolorach, na przemian dla różnych katalogów, z których pochodzą ścieżki plików;

[...] proszę się nie urażać i dziękuje za pomomoc

Z tej zazdrości zaczęłaś się jąkać. :]

0

Tak z tej zazdrości :)
Dziękuje serce ale popatrz w kod wyżej procedurę malowana ListBoxa mam serce i działa nie wiem gdzie co zmieńić
by tu w memo pojawiała się ścieżka

Form3.Memo1.Lines.Add(LabeledEdit1.Text+';'+ListBox2.Items[i]+';'+ListBox1.Items[i]);

za pomocą SelectDirectory dodając X plików działa jak ma.
W Listbox mam tylko nazwy a w powyższym kodzie pojawiają się ścieżki.

Ten sam efekt chce uzyskać dodając pojedynczy plik
Nie wiem gdzie mi czegoś brakuje chyba w OpenDialog albo potrzebuje procedurę jak w wyszukiwania plików wyżej w SelctCDirectory nie wiem gdzie jest to ukryte ze działa z SelectDirectory a z OpnDialog nie

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