CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - c++Builder(RAD Studio) - warunek if, proporcje, pytanie

c++Builder(RAD Studio) - warunek if, proporcje, pytanie

dział ogólny

c++Builder(RAD Studio) - warunek if, proporcje, pytanie

Nowy postprzez Peter_M » wtorek, 4 grudnia 2018, 12:58

Witajcie, C++builderowcy, jest to mój pierwszy post na waszym forum. I chyba jest to jedyne forum na polskiej stronie internetu, gdzie można się dowiedzieć całkiem przydatnych rzeczy o C++Builderze, a także wskazówek na stronie głównej. W moim przypadku jest to strona bardzo pomocna i pomogła mi nie jeden raz w znalezieniu problemu wskazówki. Panie CyfrowyBaron, powinien pan nadal rozwijać stronę, oraz dodawać więcej wskazówek dla builderowców.
A więc mam pewien problem, być może trywialny dla speców, jednak dla mnie no niestety nie potrafię go rozwiązać, dlatego też postanowiłem założyć konto na waszym forum i spróbować razem z wami go rozwiązać.
W mojej aplikacji okienkowej jest pewne okno do minimalistycznej edycji obrazków, na razie chciałbym tylko bitmapy, oraz jpg obsługiwać, jest w niej komponent TImage, OpenPictureDialog, oraz szereg CheckBoxów, oraz także 2 buttony jeden do ładowania obrazków do komponentu TImage, drugi do wywołania funkcji drukuj obrazek itd. I teraz zaczyna się problem, otóż zadanie buttona drukuj ma się wykonać wtedy kiedy dopiero jest załadowany obrazek, a jeśli go nie ma wyrzucić komunikat, że najpierw ma być załadowany obrazek, to jest pierwszy problem. Natomiast drugi problem jest tego typu, że bazując na poradzie dotyczącej zmian proporcji Obrazu link: http://programowanie.cal.pl/cyfbar/grafika.html#graf19 po okodowaniu zdażeń komponentów CSPINEDIT, nie widzę, żadnych zmian w obrazie, jedynie zmieniają się wartości obrazu, a sam obraz pozostaje bez żadnych zmian. Sprawdziłem kod na osobnym projekcie biorąc komponent TImage oraz wszelkie inne komponenty, które potem wykonywałem wg poradnika, niestety bez żadnych zmian.
Co należało by zmienić w kodzie dla proporcji obrazu aby uświadczyć jakiekolwiek zmiany w obrazie, oraz jaki warunek if dać, aby założenie które przedstawiłem się spełniło?
Załączam kod odpowiedzialny za ładowanie obrazka, zmian proporcji, oraz wywołanie funkcji drukuj.
Serdecznie dziękuję, za poradę doradzenie mi co tu muszę pozmieniać. Pozdrawiam Piotr!
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
załączam kod odpowiedzialny za proporcje obrazu, oraz kody odpowiedzalne za ładowanie obrazu, oraz wywołanie fukcjii drukującej.
KOD cpp:     UKRYJ  
void __fastcall TPrintImageForm::AdjSizeHChange(TObject *Sender)
{
        if(ActiveControl == AdjSizeH)
                {
                        double SizeH = (double)Image->Picture->Width/((double)Image->Picture->Height/(double)AdjSizeH->Value);
                        AdjSizeW->Value = SizeH;
                }


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

void __fastcall TPrintImageForm::AdjSizeWChange(TObject *Sender)
{
        if(ActiveControl == AdjSizeW)
                {
                        double SizeW = (double)Image->Picture->Height/((double)Image->Picture->Width/(double)AdjSizeW->Value);
                        AdjSizeH->Value = SizeW;
                }

}

KOD cpp:     UKRYJ  
void __fastcall TPrintImageForm::LoadImageFromFileBtnClick(TObject *Sender)
{
        if(ImageDlg->Execute(Handle))
        {
                Files = ImageDlg->FileName;
                FileNames = ExtractFileName(Files);

                try
                        {
                                Image->Picture->LoadFromFile(Files);
                                BMP->LoadFromFile(Files);
                                BMP->PixelFormat = pf32bit;
                        }
                catch(...)
                {
                        TJPEGImage *loadJpg = new TJPEGImage();
                        loadJpg->LoadFromFile(Files);
                        BMP->Width = loadJpg->Width;
                        BMP->Height = loadJpg->Height;

                        BMP->Canvas->Draw(NULL, NULL, loadJpg);
                        BMP->PixelFormat = pf32bit;
                        loadJpg->Free();

                }
                LoadedBar->Panels->Items[0]->Text = L"Loaded Picture: " + FileNames;
                AdjSizeH->Value = Image->Picture->Height;
                AdjSizeW->Value = Image->Picture->Width;
                PropertiesGroup->Show();
        }

        else
        {
                MessageBoxW(Handle, L"Nothing Was Loaded!", L"NotePadExtra - Print Image",
                MB_OK|MB_ICONWARNING) == ID_OK;
                Image->Picture = NULL;
                LoadedBar->Panels->Items[0]->Text = L"Loaded Picture: " L"Nothing Loaded!";
                PropertiesGroup->Hide();

        }

}

KOD cpp:     UKRYJ  
void __fastcall TPrintImageForm::PrintImageBtnClick(TObject *Sender)
{
    PrintImageFunction();
}
Avatar użytkownika
Peter_M
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): poniedziałek, 3 grudnia 2018, 23:36
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: RAD Studio 10.2.3
SKYPE: pikus_666
Gadu Gadu: 5079748
    WindowsChrome

Re: c++Builder(RAD Studio) - warunek if, proporcje, pytanie

Nowy postprzez lukagrom » środa, 5 grudnia 2018, 10:57

Jeżeli komponent TImage jest "pusty" to siłą rzeczy jego właściwości
Kod: Zaznacz cały
Image->Picture->Width
oraz
Kod: Zaznacz cały
Image->Picture->Height
są równe zawsze 0.
Czyli np. można sobie nastawić funkcję sprawdzającą takowy warunek:
KOD cpp:     UKRYJ  
void __fastcall TForm1::is_Empty(TImage *image)
{
 if(image->Picture->Width==0)
  ShowMessage("Zaladuj plik do komponentu!");
}
 

Za ten post autor lukagrom otrzymał podziękowanie od:
Peter_M
Avatar użytkownika
lukagrom
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 1 stycznia 2013, 14:54
Podziękował : 7
Otrzymał podziękowań: 2
System operacyjny: Windows Vista
Kompilator: C++ Builder 10.1 Starter
Gadu Gadu: 0
    Windows VistaChrome

Re: c++Builder(RAD Studio) - warunek if, proporcje, pytanie

Nowy postprzez lukagrom » środa, 5 grudnia 2018, 11:03

Z tym skalowaniem nie mam pojęcia, ale przypominam sobie jedynie, że po wszelkich przekształceniach TImage chyba wymusza zastosowanie funkcji Refresh(). Może, akurat tego tutaj brakuje.

Za ten post autor lukagrom otrzymał podziękowanie od:
Peter_M
Avatar użytkownika
lukagrom
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 1 stycznia 2013, 14:54
Podziękował : 7
Otrzymał podziękowań: 2
System operacyjny: Windows Vista
Kompilator: C++ Builder 10.1 Starter
Gadu Gadu: 0
    Windows VistaChrome

Re: c++Builder(RAD Studio) - warunek if, proporcje, pytanie

Nowy postprzez Cyfrowy Baron » środa, 5 grudnia 2018, 11:40

Nie wiem o co tobie chodzi z tym skalowanie obrazu. Być może masz w Image właściwość Stretch ustawioną na true, a wtedy obraz zawsze będzie rozciągany na rozmiar Image. Sprawdziłem ten kod i działa - inaczej zresztą być nie może.
Piszesz zbyt chaotycznie. Skup się na jednym problemie na raz, a nie na całym programie.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Peter_M
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4725
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: c++Builder(RAD Studio) - warunek if, proporcje, pytanie

Nowy postprzez Peter_M » środa, 5 grudnia 2018, 14:10

Witajcie. Faktycznie fukcje odpowiadające za skalowanie działają sprawnie. Brakowało kilku linijek kodu odpowiedzialnych za podgląd. Rozwiązanie znalazłem na forum. Co do podpowiedzi pana lukagrom to faktycznie nie pomyślałem o tym ;)
Cyfrowy Baron napisał(a):Nie wiem o co tobie chodzi z tym skalowanie obrazu. Być może masz w Image właściwość Stretch ustawioną na true, a wtedy obraz zawsze będzie rozciągany na rozmiar Image. Sprawdziłem ten kod i działa - inaczej zresztą być nie może.
Piszesz zbyt chaotycznie. Skup się na jednym problemie na raz, a nie na całym programie.
no chodziło mi o to, że wczytuje bitmapę potem chce ustawić proporcje obrazu komponentem cspinedit a tu załadowania bitmapa nie zmienia się. Przykładowo ładuje bitmape 200x200 i chce ustawić na 100 x100. Ustawiam zadane wartości, a tu załadowany obrazek zmienił wartości ale nadal nie było widać zmian w obrazie. No ale to już naprawiłem. Głównym problemem było brak skalowania obrazu. Pobocznym problemem był warunek przy drukowaniu obrazu.
Aha co do Stretch to mam checkboxa i skalowanie działa nawet z zaznaczonym checkboxem Stretch jak i bez niego.
Avatar użytkownika
Peter_M
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): poniedziałek, 3 grudnia 2018, 23:36
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: RAD Studio 10.2.3
SKYPE: pikus_666
Gadu Gadu: 5079748
    LinuxChrome

Re: c++Builder(RAD Studio) - warunek if, proporcje, pytanie

Nowy postprzez Peter_M » czwartek, 6 grudnia 2018, 18:23

Zadziałało. Faktycznie warunek if podany przez pana lukagrom spełnia swoje zadanie.
Wszystko działa zgodnie z założeniem. Naprawdę panie Cyfrowy Baron powinieneś nadal rozwijać swój serwis o nowe porady bo dzięki twej stronie można się nauczyć wiele ciekawych rozwiązań używanych w c++builderze. A no i odrazu nie spotyka się tu hejtu. Dzięki serdeczne za wskazówki.
Avatar użytkownika
Peter_M
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): poniedziałek, 3 grudnia 2018, 23:36
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: RAD Studio 10.2.3
SKYPE: pikus_666
Gadu Gadu: 5079748
    LinuxChrome


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 0 gości

cron