C++ Borland - Zapis pliku graficznego do katalogu z "automatu" zapisz

0

Witam

Mam programik który po kliknięciu na button - zapisz - zapisuje wyświetlany plik w strukturze katalog głównego - czyli tam gdzie jest plik exe

Tutaj podaję kod:

void __fastcall TForm1::ButtonSaveImage2Click(TObject *Sender)
{

Color=clInactiveBorder;

Image2->Picture->Bitmap->SaveToFile(ExtractFilePath(Application->ExeName)+"Image2-"+
                    DateToStr(Date()) +'-'
                   +TimeToStr(Time())[1]
                   +TimeToStr(Time())[2]  +'-'
                   +TimeToStr(Time())[4]
                   +TimeToStr(Time())[5]
                   +".bmp");
ButtonSaveImage2->Caption="zapisano";
}

Chcę zrobić tak aby plik był zapisywany z - "automatu" - bez pytania gdzie ma być zapisany czyli klik na button zapisz i plik jest zapisany do katalogu o nazwie saveimg.

Z góry dziękuję za pomoc.

0

+TimeToStr(Time())[1]
+TimeToStr(Time())[2] +'-'
+TimeToStr(Time())[4]
+TimeToStr(Time())[5]

Zapisz sobie ten TimeToStr(Time()) do osobnej zmiennej, bo tego się czytać nie da.
Na dodatek tak jak jest teraz, to gdy komp zamuli akurat w czasie wykonywania tych poleceń, możesz dostać [5] z innego czasu (a nawet daty) niż [2].

0
Image2->Picture->Bitmap->SaveToFile(ExtractFilePath(Application->ExeName)+"saveimg\\Image2-"+FormatDateTime("hh-nn",Time())+".bmp");
0

Witam,

serdeczne dzieęi za pomoc.

Ten kod powoduje dalej zapisywanie pliku w katalogu głównym i dodaje do nazwy plik jeszcze przedrostek Wyglada to tak: saveimgImage itd

Image2->Picture->Bitmap->SaveToFile(ExtractFilePath(Application->ExeName)+"**saveimg**\Image2-"+FormatDateTime("hh-nn",Time())+".bmp");

Natomiast to:

Image2->Picture->Bitmap->SaveToFile(**saveimg**ExtractFilePath(Application->ExeName)+"saveimg\Image2-"+FormatDateTime("hh-nn",Time())+".bmp");

rozwiazuje problem. Zapis jest w katalogu saveimg.

Jeden warunek - trzeba ręcznie utworzyć katalog saveimg ;-)

PS. Te ** to tylko dla wyróżnienia ;-)

0

Użyj mkdir lub CreateDirectory dla stworzenia folderu.
To co podałeś jako "ozwiazuje problem" nie może nawet się skompilować.

0

Witam,

Uważam że szanowny forumowicz _13thDragon jest w błądzie.
Ponieważ poniższy kod:

 void __fastcall TForm1::ButtonSaveImage2Click(TObject *Sender)
{

Color=clInactiveBorder;

Image2->Picture->Bitmap->SaveToFile(ExtractFilePath(Application->ExeName)+"/saveimg/Image2-"+
                    DateToStr(Date()) +'-'
                   +TimeToStr(Time())[1]
                   +TimeToStr(Time())[2]  +'-'
                   +TimeToStr(Time())[4]
                   +TimeToStr(Time())[5]
                   +".bmp");
ButtonSaveImage2->Caption="zapisano";
}

spokojnie się kompiluje, i wykonuje to co ja chcę.

Jednakże, zastanawiam się nad możliwością utworzenia katalogu saveimg z wykorzystując podane przez ciebie komendy.
Nie wiem jednak gdzie je umieścić w kodzie.

1
ForceDirectories(ExtractFilePath(Application->ExeName)+"saveimg"); // można też użyć CreateDir lub CreateDirectory
Image2->Picture->Bitmap->SaveToFile(ExtractFilePath(Application->ExeName)+"saveimg\\Image2-"+FormatDateTime("hh-nn",Time())+".bmp"); // pamiętać o podwójnym \\ lub / zamiast
0

Witam,

_13th_Dragon - jesteś wielki !

Serdeczne dzieki za pomoc. Wszystko działa jak należy. Dzieki Tobie mam prawo powiedzieć: to już całkowicie rozwiązuje problem :-)

Rozmumiem ze to:

CreateDir(ExtractFilePath(Application->ExeName)+"saveimg"); 

lub to

CreateDirectory(ExtractFilePath(Application->ExeName)+"saveimg"); 

to są podobne komendy, ale prowadzą do osiagnięcia zamierzonego celu.

Ja wpisałem tą:

ForceDirectories(ExtractFilePath(Application->ExeName)+"saveimg"); 

Tych powyższych nie sprawdzałem dlatego się pytam.

0

Witam,
tak sobie jeszcze wymyśliłem że fajnie by było gdyby program informował gdzie zapisał plik graficzny. Chodzi o to że jak kliknę na zapisz to na formatce wyświetlana się informacja gdzie plik został zapisany. Pomyślałem o Label, ale nie wiem gdzie go umieścić.

Chyba że się nie da to opiszę klawisz poprzez opcje 'Hint' z Objectora, zawsze to jakieś wyjście. Chociaż poznawszy forumowicza _13th_Dragon zapewne uzna że to trzeba rozwiązać, a nie iść na łatwiznę.

0

Pomyślałem że gdzieś w tym kodzie który podałem wcześniej a dotyczącym problemu ścieżki do katalogu saveimg. Chcę mieć tak żeby na drugim Label'u pokazywała się informacja gdzie znajduje zapisany plik.

Ten kod służy mi do __pobrani__a pliku:

 void __fastcall TForm1::ButtonOpenClick(TObject *Sender)
{
Color=clSilver;

if (OpenPictureDialog1->Execute()) {
   Image1->Picture->Bitmap->LoadFromFile(OpenPictureDialog1->FileName);
   NewMatrix();
   ImageToMatrix(1);
   BackupMatrix();
   ButtonOpen->Enabled=false;
   Image2->Picture->Bitmap->Assign(Image1->Picture->Bitmap);
   Image2->Canvas->Rectangle(0,0,MaxX,MaxY);
   Label1->Caption=OpenPictureDialog1->FileName;
   }
ButtonGaussThreshold->SetFocus();
}

Teraz gdy kliknę na otwórz to na formatce w Label'u pokazuje skąd pobiera plik.

1
Label2->Caption=ExtractFilePath(Application->ExeName)+"saveimg";
0

Witam,

Cóż mogę napisać ?

Chyba tylko to: Mówisz masz. !!!

Jestem pod ogromnym wrażeniem tak szybko udzielanej pomocy, która rozwiązuje moje problemy.

Mam jeszcze jeden ale tu chodzi o formatkę. Jest formatka1 i button który otwiera formatkę2 komendą

 Form1->ShowModal();

Efekt jest taki że wyświetla się fotmatka2 na wierzchu, a formatka1 jest z tyłu. Teraz pytanko: Jak zrobić żeby po otwarciu formatki2 formatka1 zniknęła.

0
Application->ShowMainForm=false; // to nie jest konieczne jeżeli Form1 nie jest główną formatką
Form2->Hide;
Form1->ShowModal();
Form2->Show;
Application->ShowMainForm=true; // to nie jest konieczne jeżeli Form1 nie jest główną formatką
0

Witam,

tylko że u mnie jest po "chińsku" TForm2 to formatka "startowa" programu - pierwszy ekran programu a TForm1 to formatka która odnosi się do programu na której on się wykonuje.
Czyli na TForm 2 mam tak:

Formatka Startowa

void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
   Form1->ShowModal();
}

a na TForm1 jest umieszczony button który zamyka wszystko - program jak i wszystkie okna.

TForm1

void __fastcall TForm1::ButtonExitClick(TObject *Sender)
{                                             
DeleteMatrix();
exit(0);        
} 
0

Witam,
Próbowałem w róże miejsca w tym kodzie wstawić - **

hide;

** ale nie było żadnego oczekiwanego efektu. Dalej ta formatka był widoczna pod tą właściwą. Którą uruchomiła.

 //---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "Unit1.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
   Form1->ShowModal(); //uruchamia ta wlasciwa formatke
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
 Close(); //zamyka obecna formatke ale nie chowa sie pod ta wlasciwa
}
//---------------------------------------------------------------------------
void __fastcall TForm2::BitBtn2Click(TObject *Sender)
{
Form3->ShowModal(); //uruchamia inna formatkę którą zamykam sam
}
//---------------------------------------------------------------------------

Przepraszam za długi kod ale ja już nie mam siły, a chcę dokładnie zobrazować problem.

0

Witam,

Chodzi o to gdzie ten**

Hide

**w kodzie mam wpisać. bo już się pogubiłem

0

Zapisujesz na ścianie i powtarzasz jak mantrę. Na jakiej ścianie ? Bo ja nie zabardzo rozumiem ?

0
kedlaw07 napisał(a):

Zapisujesz na ścianie i powtarzasz jak mantrę. Na jakiej ścianie ? Bo ja nie zabardzo rozumiem ?
Niestety nadal nie wiem o czym piszesz.

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