Atomska bubamara | edomovina.blog.hr
Atomska bubamara | edomovina.blog.hr
Debug/release nemaju veze s time. U project options/Application provjeri da li ti je uključen "Enable runtime themes".
Inače, pokušaj si nabaviti TMS Component Pack. Imaš preko par stotina fensi-šmensi kontrola, pa čak i one koje se koriste na MAC-u, Win7 kontrole (koje čak tako izgledaju i na xp-u) itd.
da, znam da nema veze s time, ali jednostavno s ovim projektom stalno imam nekih problema. pokrenem debug, ali ne u debugging modu, i budu normalne kontrole. zatvorim ga i ponovo pokrenem, pa budu stare. onda samo uđem u opcije projekta i samo kliknem ok, pokrenem debug i opet je sve ok. ugasim, pa ponovo pokrenem i opet je stari izgled. bas nesto serucka :/
no dobro, glavno da je sad gotov. ostavio sam ga onda u debugu, kad već ebeni release ne radi
pa evo, voila

da, znam da nema veze s time, ali jednostavno s ovim projektom stalno imam nekih problema. pokrenem debug, ali ne u debugging modu, i budu normalne kontrole. zatvorim ga i ponovo pokrenem, pa budu stare.
Nisam baš pažljivo čitao... Ako govoriš o XP kontrolama, izgled kontrola ti ovisi je li Windows XP manifest uključen u .exe datoteku. U krajnjem slučaju ti možeš u mapi s .exe datoteku uvijek držati imeprograma.exe.manifest pa će ti se program, kako god bio buildan, pokretati s Win XP kontrolama. Kako ćeš do .manifest datoteke? Potraži u Program Files, iskopiraj i promijeni ime.
BTW Win XP teme zaista mogu uzrokovati probleme. Naime, kad njih koristiš, koristiš novije verzije sistemskih .DLL-ova koje možda nisu 100% kompatibilne sa starijima. Sjećam se problema sa starim Delphijem (5?) - program nije radio s ListViewom ili tako nekom kontrolom ako su se koristile Win XP kontrole - loše je ta komponenta bila implementirana u VCL-u. Kasnije su to, naravno, ispravili.
Što se tiče Debug/Release problema... Ako nije pitanje manifesta, onda je pitanje neke druge opcije (optimizacije?) - jednostavno počni uključivati za Debug opcije koje su uključene u Releaseu, jednu po jednu. Tako ćeš doći do one zbog koje ti program ne radi dobro.
Manifest je prije trebalo uključivati (dodati manifest datoteku ili manifest komponentu na formu) no u novijim verzijama C++ Buildera/Delphija više nije potrebno. On koristi verziju 2010 gdje to ne treba, no očito je neki problem s release konfiguracijom pa mu automatski isključi manifest tj. "Enable runtime themes" opciju.
Atomska bubamara | edomovina.blog.hr
Nema. Bitno da je starije od verzije 2006.
pa ja jednostavno ne mogu vjerovat. obična je*ena for petlja ne radi. i se ne inkrementira. za popi*dit!!!!!!1
kako pozvati browse for folder dijalog koji ima i make new folder button?
jer npr ovako pozivam dijalog bez tog gumba SelectDirectory(Caption, Root, Directory);
a treba mi ovakav dijalog
guglao sam i vidio sam neke varijacije, ali dobijem onaj "starinski" izgled, a ne ovaj koji zelim :/
edit:
i mozda ne bi bilo lose ovaj "MFC" u naslovu teme promijeniti u "VCL"
#include <FileCtrl.hpp>
TSelectDirExtOpts Ops;
UnicodeString Directory;
Ops << sdNewUI << sdNewFolder;
if(SelectDirectory("Odaberite folder", L"C:\\", Directory, Ops) == true){
ShowMessage(Directory);
}
kako bih najlakse mogao cropati sliku?
znači da zadam ili u postotcima ili u pixelima kolko treba cropat, i na koji nacin, znaci da gotova slika bude od gornjeg desnog coska, od gornjeg lijevog, od sredine itd itd...
Najlakše preko piksela. Učitaj sliku u TImage, podesi AutoSize i Strech propertie po volji, i kako mijenjaš Width i Height TImage komponente time ujedno djeluješ na samu sliku.
to baš i ne pomaže...
ali nakon malo mukotrpnijeg guglanja sam mašao primjer koda koji sam onda promjenio za svoje potrebe. evo originalni primjer ako nekad nekome zatreba
#include <jpeg.hpp>
TJPEGImage *jpeg = new TJPEGImage();
jpeg->LoadFromFile("c:\\tamibig.jpg");
//jpeg->DIBNeeded();
TImage * = new TImage( this);
dest->Width = 400;
dest->Height = 550;
TImage *src = new TImage( this);
src->Picture->Bitmap->Assign( jpeg);
TRect sr(50,50,250,275);
//src rec - the area you want to cut from the source
TRect dr(0,0,500,550);
//dest rec - the area you want to paste into, usually the destination TImage size
dest->Canvas->CopyRect(dr, src->Canvas, sr);
dest->Picture->Bitmap->SaveToFile("c:\\test.bmp");
//save the resulting cropped bitmap
delete src;
delete dest;
delete jpeg;
sad mi treba nešto drugo :)
kad preko browse for folder dijaloga odaberem željeni folder, kako pronaći sve jpg-ove iz njega i dodati ih u listbox i imagelist? i kako iz open dijaloga, kad odaberem više jpg-ova, isto ih dodat u listbox i imagelist?
edit: zapravo znam kako dodat u imagelist, trebam samo kako dodat u listbox?
jer npr, ako odaberem više datoteka, ovako se dodaje samo jedna, a ja trebam sve odabrane
if(OpenDialog1->Execute())
ListBox1->AddItem(OpenDialog1->FileName, Sender);
Pa u tom codu koristiš ništa drugo već TImage kao source komponentu
. Samo što je dinamički alocirana. No svejedno...
Kod OpenDialog-a u Options omogući AllowMultiSelect. Zatim code
for(int i = 0; i < OpenDialog1->Files->Count; i++)
ListBox1->Items->Add(OpenDialog1->Files->Strings[i]);
isprobavam nešto sa SDI aplikacijom i imam jedan problem. imam 2 forme, znači onu glavnu i još jednu običnu. klikom na file->new na glavnoj formi želim da se ta druga forma stvori unutar ove glavne forme. ali ona se pojavi čim pokrenem aplikaciju, što nije ono što ja želim. postavio sam FormStyle na fsMDIChild, šta još treba? ako to uopće ide tako... :/
edit: update problema
išao sam ispočetka. napravio sam obični vcl forms projekt. napravio dvije forme. jednoj FormStyle postavio na fsMDIForm, na drugoj nisam ništa dirao, ostalo je fsNormal. zatim sam dodao sljedeći kod za file -> new na glavnom meniju.
TimpForm *frmChild = new TimpForm(Application);
frmChild->Caption = L"Untitled";
frmChild->FormStyle = fsMDIChild;
i sve je bilo u redu. pri pokretanju glavna forma je bila čista dok nisam dodavao druge klikom na new.
bilo je dobro dok drugoj nisam mjenjao FormStyle. i nakon toga, na šta god da ga postavim, kod pokretanja se pojavi unutar glavnog prozora. bez ikakvog razloga, nisam ništa dirao, samo sam mjenjao FormStyle i ponovo ga vratio na staru vrijednost i opet nije dobro. zašto dolazi do toga? kako se to može riješit?
Mislim da bih ja tebi trebao početi naplaćivati support 
Uglavnom.. ako želiš jednu formu unutar druge ne trebaš ništa dirati stilove već definirati koja je kojoj parent (roditelj);
Form2->Parent = this;
..i onda Show. Ne možeš u ovom slučaju koristiti ShowModal.
trebam dobit rgb vrijednosti pixela sa slike. dva dana sam se mučim sa tim problemom i nakon malo razmišljanja i guglanja, dobio sam kod koji izgleda ovako
TBitmap *bm = new TBitmap();
bm->LoadFromFile(Edit1->Text);
TColor c = bm->Canvas->Pixels[0][0];
int r = GetRValue(c);
int g = GetGValue(c);
int b = GetBValue(c);
ShowMessage("r: " + String(r) + "\ng: " + String(g) + "\nb: " + String(b));
delete bm;
naizgled je sve dobro, samo što se kod LoadFromFile baci iznimka EInvalidGraphic
a ne znam zašto ju baca, obična jpg datoteka. neće ni sa bmp, png, gif itd
EInvalidGraphic is raised when
An application attempts to load a file that is not a valid bitmap, icon, metafile, or user-defined graphic type into a picture.
An application attempts to load a file with an unrecognized extension.
An image does not match the format specified in a call to LoadFromClipboardFormat or SaveToClipboardFormat.
An application attempts to set a bitmap's PixelFormat property to an unsupported value.
Pa zakomentiraj sve linije poslije LoadFromFile da budeš siguran da je u tome riječ. Inače, najvjerojatnije je riječ o krivoj bmp slici. Jpg treba dodatna zaglavlja za podršku.
znam sto posto da je tu problem, jer sam debuggiro i vidim da tu pukne
probat ću onda nešto iskombinirat
skužio sam u čemu je problem. c poprimi vrijednost -1, a evo što piše u dokumentaciji
Read Pixels to learn the color on the drawing surface at a specific pixel position within the current clipping region. If the position is outside the clipping rectangle, reading the value of Pixels returns -1.
dalje, ClipRect
Read-only property that specifies the boundaries of the clipping rectangle.
Use ClipRect to determine where the canvas needs painting. ClipRect limits the drawing region of the canvas so that any drawing that occurs at coordinates outside the ClipRect is clipped and does not appear in the image.
...
Note: ClipRect can be modified using the SelectClipRgn Win32 API.
to ide nekako ovako:
HRGN MyRgn;
MyRgn = ::CreateRectRgn(100,100,200,200);
::SelectClipRgn(Image1->Canvas->Handle,MyRgn);
Image1->Canvas->Brush->Color = clRed;
Image1->Canvas->FillRect(Image1->Canvas->ClipRect);
Image1->Invalidate();
::SelectClipRgn(Image1->Canvas->Handle,NULL);
::DeleteObject(MyRgn);
samo što to meni nikako ne uspijeva i c uvijek poprima -1
edit: evo riješio sam
prvo učitam jpeg, pa onda kreiram novi TBitmap i taj jpeg dodjelim toj bitmapi i dalje ide sve normalno
TJPEGImage *jpeg = new TJPEGImage();
jpeg->LoadFromFile(Edit1->Text);
TBitmap *bm = new TBitmap();
bm->Assign(jpeg);
HRGN MyRgn = CreateRectRgn(0,0,200,200);
SelectClipRgn(bm->Canvas->Handle,MyRgn);
TColor c = bm-> Canvas->Pixels[0][0];
int r = GetRValue(c);
int g = GetGValue(c);
int b = GetBValue(c);
ShowMessage("r: " + String(r) + "\ng: " + String(g) + "\nb: " + String(b));
itd...

