Jak wyświetlić w message boxie ścieżkę do aktualnie otwartego pliku?

0

Siema, jestem w trakcie pisania notatnika i chciałbym, żeby po naciśnięciu wyjścia z programu program zapytał użytkownika czy zapisać zmiany no i potem program wyświetla ścieżkę do tego pliku (jak na załączonym obrazku) i nie wiem jak dodać tą ścieżkę do pliku, żeby pokazywała się w message boxie

0

No, ale w czym problem? Nie umiesz posklejać napisów?
Pokaż kod, to się okaże co źle robisz.

0

No i jeszcze warto wiedzieć, że sklejając napisy można użyć \n co spowoduje przejście do nowej linii i całość nie będzie rozciągnięta za mocno w poziomie.

0

No ale nie chce mieć dobrego komunikatu dla tylko tego jednego pliku, tylko co bym nie otwarł z różnymi ścieżkami chce aby pokazywała się ta konkretna do aktualnie otwartego pliku, a nie, że w komunikacie ręcznie dopisze ścieżke i ona będzie ta sama cały czas.

void __fastcall TForm1::Wyjscie1Click(TObject *Sender)
{
        if(Application->MessageBoxA("Czy chcesz zapisać zmiany do ",
        "Notatnik", MB_YESNOCANCEL | MB_ICONQUESTION) == IDYES)
        {
              Form1->Zapisz1Click(MainMenu1);
        }
        else if(Application->MessageBoxA("Czy chcesz zapisać zmiany do ",
        "Notatnik", MB_YESNOCANCEL | MB_ICONQUESTION) == IDNO)
        {
              Application->Terminate();
        }

}

i po tym komunikacie ("Czy chcesz zapisać zmiany do " chciałbym aby się wyświetlała ścieżka aktualnie otwartego pliku

0

No to zrób coś w tym stylu jak kolega wcześniej napisał:

AnsiString Message;
Message = "Czy chcesz zapisać zmiany do \n" + SCIEZKA_DO_PLIKU;
Application->MessageBoxA(Message.c_str(),"Notatnik", MB_YESNOCANCEL | MB_ICONQUESTION);

Pisane z pamięci bez sprawdzenia, ale powinno być ok. Chociaż zależy której wersji używasz i jakie masz ustawienia kompilatora. Chodzi tu o unicode stringi.

0

Dobra zadam pytanie troche inaczej. Jak uzyskać ścieżkę aktualnie otwartego pliku? Chcę mieć po prostu zmienną która będzie przechowywać mi ścieżkę pliku, który aktualnie jest otwarty.

0
matis4prog napisał(a):

Dobra zadam pytanie troche inaczej. Jak uzyskać ścieżkę aktualnie otwartego pliku? Chcę mieć po prostu zmienną która będzie przechowywać mi ścieżkę pliku, który aktualnie jest otwarty.

Sam sobie odpowiedziałeś. Musisz mieć zmienną (na początek możesz dodać do sekcji private klasy okna głónego, potem możesz pomyśleć nad oddzieleniem GUI od reszty i wrzucenie tego do nowych klas) którą ustawisz w momencie wskazywania przez użytkownika pliku jaki ma być otwarty. Przecież gdzieś otwierasz plik, tam musisz ustawić tą zmienną. Niestety bez kodu nie pomoże Ci nikt, ale to co Ci napisałem powinno być jasne i czytelne.

0

Okej, ale właśnie nie wiem jak ustawić tą zmienną. Załóżmy, że na początku robię zmienną AnsiString sciezkapliku=""; Tutaj jest fragment kodu gdzie otwieram jakiś plik i tak jak przypisuje zmiennej nazwapliku rzeczywistą nazwe otwartego pliku to jak mam do zmiennej sciezkapliku przypisac sciezke tego pliku. Jaks funkcja zapewne istnieje do tego czy cos

void __fastcall TForm1::Otwrz1Click(TObject *Sender)
{
        if(OpenDialog1->Execute())
        {
             try
             {
                tresc->Lines->LoadFromFile(OpenDialog1->FileName);
                nazwapliku=OpenDialog1->FileName;
                sciezkapliku=???????????????????? :(
             }
             catch(...)
             {
                ShowMessage("Błąd otwarcia pliku. Upewnij się, że plik istnieje");
             }
        }
}

0

Ale Ci nie potrzeba samej ścieżki pliku. OpenDialog1->FileName zawiera całą ścieżkę do pliku razem z jego nazwą która jest wymagana do zapisania. W komunikacie też by wypadało napisać ścieżkę pliku wraz z nazwą. Skrobnąłem mały przykład tak na szybko:

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
  TMainMenu *MainMenu1;
  TMenuItem *mmiOpen;
  TOpenDialog *OpenDialog;
  TMemo *Memo;
  void __fastcall mmiOpenClick(TObject *Sender);
  void __fastcall OnFormClose(TObject *Sender, TCloseAction &Action);
private:	// User declarations
  UnicodeString FileName;                   //<------- tutaj dodajemy tak jak u Ciebie
public:		// User declarations
  __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::mmiOpenClick(TObject *Sender)
{
  if (OpenDialog->Execute())
  {
    Memo->Lines->LoadFromFile(OpenDialog->FileName);
    FileName = OpenDialog->FileName;
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnFormClose(TObject *Sender, TCloseAction &Action)
{
  if (Memo->Modified)
  {
    int Result;
    UnicodeString Message;
    Message = "Czy chcesz zapisać zmiany do \n" + FileName;

    Result = Application->MessageBox(Message.c_str(),L"Notatnik", MB_YESNOCANCEL | MB_ICONQUESTION);

    if (Result == ID_YES)
    {

    }
    else
    {

    }
  }
}
//---------------------------------------------------------------------------

Tylko miej na uwadze, że ja korzystam z Unicode Stringów, żeby nawet na innych lokalizacjach niż WIn1250 wyświetlane były poprawne nasze znaczki diakrytyczne.

0

Dzięki mordo, buziaki o to chodziło, śmiga, pozdro :DDD

Własnie nie wiedzialem, że OpenDialog1->FIleName przechowuje całą ścieżke i tego mi brakowalo

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