xarda Δημοσ. 31 Μαρτίου 2012 Μέλος Δημοσ. 31 Μαρτίου 2012 Ουτε αυτο εκτελειτε...Δοκίμασα το αλλο ομως. Εφτιαξα ενα νέο vcl project εκανα Copy paste τον κώδικα απο το link και εκτελειτε! Δεν μπορώ ομως να καταλαβω τι μπορει να φταιει και δεν φορτωνει την φωτο στο "παλιο" μου Project....Δεν φαινεται να εχω κατι που να το εμποδίζει...
Directx Δημοσ. 31 Μαρτίου 2012 Δημοσ. 31 Μαρτίου 2012 Ουτε αυτο εκτελειτε...Δοκίμασα το αλλο ομως. Εφτιαξα ενα νέο vcl project εκανα Copy paste τον κώδικα απο το link και εκτελειτε! Δεν μπορώ ομως να καταλαβω τι μπορει να φταιει και δεν φορτωνει την φωτο στο "παλιο" μου Project....Δεν φαινεται να εχω κατι που να το εμποδίζει... Τελικά μιλάμε για κάποιο bug κατά το build, από περιέργεια λοιπόν, φόρτωσε το παλιό σου PROJECT και κάνε Project->Clean "όνομα Project" και δοκίμασε ύστερα να το τρέξεις (μπορείς και με το χέρι να καθαρίσεις όλα τα περιεχόμενα του Debug ή Release folder του PROJECT σου -για σιγουριά). Ενδεχομένως το πρόβλημα να διορθωθεί. Να έχεις υπόψη σου πάντως ότι ο C++ Builder ταλαιπωρείται από διάφορα bugs κατά το build, για παράδειγμα όταν έχω ενεργούς τους Pre-Compiled headers υπάρχουν φορές που το PROJECT μου δεν μπορεί να γίνει καν compile (με παράξενα errors) ή ορισμένες φορές μπορεί ο compiler να "τρελαθεί" παρουσιάζοντας σφάλματα που δεν υπάρχουν εντός των STL Headers (!) -σε τέτοιες περιπτώσεις κλείνεις και ανοίγεις εκ νέου το IDE.
xarda Δημοσ. 31 Μαρτίου 2012 Μέλος Δημοσ. 31 Μαρτίου 2012 Βρέθηκε το πρόβλημα τουλάχιστον οχι ομως και η λύση...Λοιπόν: Την αρχική φόρμα μου την εχω ορίσει ως: >Form style:fsMDIForm και οταν εκτελώ τον κώδικα δεν εμφανιζει την εικόνα παρα μονο οταν κάνω Minimize. Οταν ομως αλλάζω το Form style σε: >Form style:fsΝοrmal τότε τρέχει κανονικά...
Directx Δημοσ. 31 Μαρτίου 2012 Δημοσ. 31 Μαρτίου 2012 Βρέθηκε το πρόβλημα τουλάχιστον οχι ομως και η λύση...Λοιπόν: Την αρχική φόρμα μου την εχω ορίσει ως: >Form style:fsMDIForm και οταν εκτελώ τον κώδικα δεν εμφανιζει την εικόνα παρα μονο οταν κάνω Minimize. Οταν ομως αλλάζω το Form style σε: >Form style:fsΝοrmal τότε τρέχει κανονικά... Μισό λεπτό όμως, γιατί όρισες την φόρμα σου ως MDIParent; Αναπτύσσεις MDI εφαρμογή; Αυτές οι λεπτομέρειες έχουν τεράστια σημασία!! Φυσικά σε αυτή την περίπτωση θα έχεις προβλήματα καθώς μια MDI Parent Form τρέχει διαφορετικά διότι λειτουργεί ως Container για τα MDI Children Form σου!! Αν δεν σκοπεύεις να γράψεις MDI Application μην την ορίσεις έτσι!! Βρέθηκε το πρόβλημα τουλάχιστον οχι ομως και η λύση...Λοιπόν: Την αρχική φόρμα μου την εχω ορίσει ως: >Form style:fsMDIForm και οταν εκτελώ τον κώδικα δεν εμφανιζει την εικόνα παρα μονο οταν κάνω Minimize. Οταν ομως αλλάζω το Form style σε: >Form style:fsΝοrmal τότε τρέχει κανονικά... --EDIT/UPDATE: Λοιπόν, όταν η φόρμα μας είναι fsMDIForm το TImage δεν κάνει σωστό Invalidation του εαυτού του (από ότι βλέπω - ούτε bug είναι ούτε τίποτε τέτοιο, απλά τα MDI Parent έχουν άλλη φιλοσοφία λειτουργίας). Για να μην μπλέξουμε το Windows API αρκεί να κάνουμε ένα TImage->Hide(); TImage->Show(); ώστε να το αναγκάσουμε να κάνει άμεσα Repaint το περιεχόμενο του. Δοκίμασε λοιπόν αυτό και είσαι έτοιμος: > Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName); Image1->Hide(); Image1->Show(); ** Επαναλαμβάνω, ΜΗΝ χρησιμοποιείς το fsMDIForm αν δεν σκοπεύεις να γράψεις MDI Application ** Καλή συνέχεια!!
xarda Δημοσ. 31 Μαρτίου 2012 Μέλος Δημοσ. 31 Μαρτίου 2012 Ναι!Η main φορμα μου είναι MDIParent η οποια με xρηση της new δημιουργει πολλές MDIChild φορμες εντός αυτής.Νομίζω πως είναι η καλύτερη επιλογή με το καλύτερο ( οπτικο τουλάχιστον αποτελέσμα ). Πράγματι τώρα εμφανίζει την εικόνα και χωρίς minimize! thanks!
xarda Δημοσ. 9 Απριλίου 2012 Μέλος Δημοσ. 9 Απριλίου 2012 Μιας που εφτασα στο τέλος πρεπει να κάνω και το setup! Κατέβασα το Inno Setup Compiler και έκανα τις ρυθμίσεις που πρέπει.Απο τον embarcadero εδωσα: project -> options -> C++ Linker και ξετσέκαρα το Dynamic RTL.Επίσης στο ίδιο παράθυρο και στο Packages ξετσέκαρα επίσης το Build With Runtime packages για να φορτωθούν ολα στο .exe αρχείο και να μήν χρείαζομαι διαφορες .DLL ....Ομως κατα την εκκίνηση του προγράμματος ( αφου κάνω την εγκατασταση κανονικά ) το πρόγραμμα καλεί ένα sql ( εξωτερικό scriptaki ) το οποίο δημιουργεί την βάση μου.Το πρόβλημα είναι πως ενώ το έχω στον ίδιο φάκελο με το .exe αρχείο μου και έχω ρυθμίσει το path μου εμφανιζει το μήνυμα: "" %1 could not be found "". Είναι σίγουρο πως εκεί βρίσκεται το πρόβλημα..Τι μπορώ να κάνω σε αυτή την περίπτωση; ( να σημειώσω πως αν ΔΕΝ κάνω το setup.exe τότε τρέχει χωρίς πρόβλημα και βρίσκει το .sql αρχείο )
Directx Δημοσ. 9 Απριλίου 2012 Δημοσ. 9 Απριλίου 2012 Μιας που εφτασα στο τέλος πρεπει να κάνω και το setup! Κατέβασα το Inno Setup Compiler και έκανα τις ρυθμίσεις που πρέπει.Απο τον embarcadero εδωσα: project -> options -> C++ Linker και ξετσέκαρα το Dynamic RTL.Επίσης στο ίδιο παράθυρο και στο Packages ξετσέκαρα επίσης το Build With Runtime packages για να φορτωθούν ολα στο .exe αρχείο και να μήν χρείαζομαι διαφορες .DLL ....Ομως κατα την εκκίνηση του προγράμματος ( αφου κάνω την εγκατασταση κανονικά ) το πρόγραμμα καλεί ένα sql ( εξωτερικό scriptaki ) το οποίο δημιουργεί την βάση μου.Το πρόβλημα είναι πως ενώ το έχω στον ίδιο φάκελο με το .exe αρχείο μου και έχω ρυθμίσει το path μου εμφανιζει το μήνυμα: "" %1 could not be found "". Είναι σίγουρο πως εκεί βρίσκεται το πρόβλημα..Τι μπορώ να κάνω σε αυτή την περίπτωση; ( να σημειώσω πως αν ΔΕΝ κάνω το setup.exe τότε τρέχει χωρίς πρόβλημα και βρίσκει το .sql αρχείο ) Για αρχή.. Αν πας στον φάκελο που έχεις εγκαταστήσει την εφαρμογή μέσο του File Explorer και εκκινήσεις το εκτελέσιμο παρουσιάζεται το ίδιο πρόβλημα; Αν όχι, τότε θα πρέπει να ορίσεις (προσθέσεις) την εντολή WorkingDir: "{app}" σε κάθε δήλωση του [icons] section, πχ: > Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"; WorkingDir: "{app}"
xarda Δημοσ. 9 Απριλίου 2012 Μέλος Δημοσ. 9 Απριλίου 2012 Μηπως μπορεις να γινεις λιγο πιο αναλυτικος;Δεν καταλαβα την απαντηση σου. Οταν τρεχω το .exe απο τον φάκελο δεν υπαρχει κανενα προβλημα και εκτελειται επιτυχως.
Directx Δημοσ. 10 Απριλίου 2012 Δημοσ. 10 Απριλίου 2012 Το πρόβλημα προέρχεται από το δεν έχεις δηλώσει στα εικονίδια των shortcut που δημιουργεί το InnoSetup το λεγόμενο WorkingDir το οποίο υποδεικνύει στο πρόγραμμα σου όταν ξεκίνα από μια συντόμευση, ποιος είναι ο φάκελος εργασίας του, με αποτέλεσμα να μην βρίσκει το bat αρχείο κλπ. Η δήλωση του WorkingDir γίνεται προσθέτοντας το όπως σου έδειξα σε ένα υποθετικό InnoSetup script παραπάνω και αρκεί να δείχνει στο {app} (αν έχεις αμφιβολίες για την σύνταξη δες και το εξαιρετικά αναλυτικό help του Inno) Υ.Γ. Υπόψη ότι το πρόβλημα αυτό προέρχεται από τον τρόπο που καλείς εσωτερικά στο πρόγραμμα σου το bat αρχείο, αλλά με την παραπάνω δήλωση μπορείς να το κρύψεις (για την ώρα).
xarda Δημοσ. 10 Απριλίου 2012 Μέλος Δημοσ. 10 Απριλίου 2012 Το εκανα ετσι: > [icons] Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{app}" Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; WorkingDir: "{app}" Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon; WorkingDir: "{app}" Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon;WorkingDir: "{app}" αλλα τα ίδια... μεσα στο φακελο οταν το τρεχω και του δίνω το path τρέχει κανονικα.... Πιο συγκεκριμένα χρησιμοποιω τον παρακατω κωδικα οπου: > /* καλω το udl αυτο αρχείο για να δημιουργήσει το connectionstring για την σύνδεση με τον master */ ShellExecute(GetDesktopWindow(), "open", "C:\\Program Files\\xxx\\DB\\createDB.udl", NULL, NULL, SW_SHOWNORMAL); * * * * * * * * * * * * /* δημιουργεί το .bat αρχείο το οποίο θετει username + pass και καλεί το .sql αρχείο */ pCreateDBandTables = fopen ( "C:\\Program Files\\xxx\\DB\\createDBandTables.bat" ,"w"); /* περναω το ερωτημα σε ενα Memo */ this->Memo4->Text = "SQLCMD blah blah blah blah -i "+'"'+sqlScriptPathEdit->Text+'"'+" "; this->Memo4->Lines->Add("PAUSE"); fputs ( Memo4->Text.c_str() , pCreateDBandTables ); fclose (pCreateDBandTables); /* και μετα καλώ το .bat αρχειο για να φτιάξει την βάση μου*/ ShellExecute(NULL,"open","C:\\Program Files\\xxx\\DB\\createDBandTables.bat",NULL,NULL,SW_SHOWNORMAL); mainForm->ADOConnection1->Close(); Τώρα...ενω εχω στον ιδιο φακελο και το αρχείο createDB.udl το οποίο "βρισκει" και τρεχει κανονικά το setup πιο κάτω οταν πρέπει να τρέξει το createDBandTables.bat ΔΕΝ μπορει...
Directx Δημοσ. 10 Απριλίου 2012 Δημοσ. 10 Απριλίου 2012 Το εκανα ετσι: > [icons] Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{app}" Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; WorkingDir: "{app}" Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon; WorkingDir: "{app}" Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon;WorkingDir: "{app}" αλλα τα ίδια... μεσα στο φακελο οταν το τρεχω και του δίνω το path τρέχει κανονικα.... Πιο συγκεκριμένα χρησιμοποιω τον παρακατω κωδικα οπου: > /* καλω το udl αυτο αρχείο για να δημιουργήσει το connectionstring για την σύνδεση με τον master */ ShellExecute(GetDesktopWindow(), "open", "C:\\Program Files\\xxx\\DB\\createDB.udl", NULL, NULL, SW_SHOWNORMAL); * * * * * * * * * * * * /* δημιουργεί το .bat αρχείο το οποίο θετει username + pass και καλεί το .sql αρχείο */ pCreateDBandTables = fopen ( "C:\\Program Files\\xxx\\DB\\createDBandTables.bat" ,"w"); /* περναω το ερωτημα σε ενα Memo */ this->Memo4->Text = "SQLCMD blah blah blah blah -i "+'"'+sqlScriptPathEdit->Text+'"'+" "; this->Memo4->Lines->Add("PAUSE"); fputs ( Memo4->Text.c_str() , pCreateDBandTables ); fclose (pCreateDBandTables); /* και μετα καλώ το .bat αρχειο για να φτιάξει την βάση μου*/ ShellExecute(NULL,"open","C:\\Program Files\\xxx\\DB\\createDBandTables.bat",NULL,NULL,SW_SHOWNORMAL); mainForm->ADOConnection1->Close(); Τώρα...ενω εχω στον ιδιο φακελο και το αρχείο createDB.udl το οποίο "βρισκει" και τρεχει κανονικά το setup πιο κάτω οταν πρέπει να τρέξει το createDBandTables.bat ΔΕΝ μπορει... Καθώς χρησιμοποιείς την ShellExecute για την εκτέλεση του .BAT δοκίμασε να ορίσεις στην προτελευταία παράμετρο της (lpDirectory) αντί NULL την διαδρομή στην οποία βρίσκεται το .BAT αρχείο σου (για να καταλάβεις τι κάνουμε, είναι σαν να ορίζουμε το "WorkingDir" και για την ίδια την ShellExecute) ή στην διαδρομή που θέλεις να δημιουργήσει τα αρχεία του το .BAT σου (στην περίπτωση σου από ότι βλέπω και τα δυο αυτά PATH είναι κοινά). Με αυτό τον τρόπο το .BAT θα δημιουργήσει οπωσδήποτε όλα τα απαραίτητα αρχεία στο φάκελο που του υποδεικνύεις στην προτελευταία παράμετρο (υποθέτω ότι δεν ορίζεις αυστηρά |hardcoded| paths μέσα στο ίδιο το .BAT). *Αν υποθέσουμε ότι τα αρχεία ΒΔ πρέπει να είναι στον υποκατάλογο DB ενώ το εκτελέσιμο σου είναι εκτός του DB τότε το ShellExecute (όταν το lpDirectory είναι NULL) θα εκτελέσει το .BAT σου στο φάκελο που βρίσκεται το εκτελέσιμο που κάλεσε την ShellExecute -ή πιο σωστά στο τρέχον φάκελο -current dir- της process μας, αντί του DB (ελπίζω να καταλαβαίνεις τι εννοώ)* πχ. αν θέλουμε το .BAT να εκτελεσθεί οπωσδήποτε μέσα στο φάκελο C:\\Program Files\\xxx\\DB\\ θα ορίσουμε την ShellExecute ως: > ShellExecute(GetDesktopWindow(), "open", "C:\\Program Files\\xxx\\DB\\createDB.udl", NULL, "C:\\Program Files\\xxx\\DB\\", SW_SHOWNORMAL); ShellExecute(NULL,"open","C:\\Program Files\\xxx\\DB\\createDBandTables.bat", NULL,"C:\\Program Files\\xxx\\DB\\",SW_SHOWNORMAL); κάνε τις ανάλογες μετατροπές - με προσοχή. Ακολουθεί ένα κομμάτι κώδικα σε C++ Builder 2010 (με υποστήριξη Unicode) που αυτοματοποιεί τις παραπάνω οδηγίες: > const UnicodeString strBat = L"C:\\Program Files\\xxx\\DB\\createDBandTables.bat"; ShellExecuteW(NULL, L"open", strBat.w_str(), NULL, ExtractFilePath(strBat).w_str(), SW_SHOWNORMAL); Το strBat πρέπει να έχει πλήρη (full) διαδρομή προς το .BAT σου.
xarda Δημοσ. 11 Απριλίου 2012 Μέλος Δημοσ. 11 Απριλίου 2012 Εγινε και αυτό!Ειχες δίκιο το path ηταν η αιτία.Εβαλα TOpenDialogs για την επιλογη των αρχείων και εκτελείται! Το νέο προβληματάκι μου εχει να κάνει με το TImage component..Στην βάση μου δεν αποθηκεύω την εικόνα που θέλω για κάθε ενα αντικείμενο ας πούμε αλλά μόνο το Path το οποίο μετά οταν θέλω να εμφανίσω την εικόνα το κάνω ενα απλό > . . . . Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName); . . . . Ομως μόνο .bmp μπορεί να εμφανίσει δυστηχώς καθώς μου πετάει errors σε εικόνες .png , .jpg κ.τ.λ... Τι μπορώ να κάνω;
Directx Δημοσ. 11 Απριλίου 2012 Δημοσ. 11 Απριλίου 2012 Εγινε και αυτό!Ειχες δίκιο το path ηταν η αιτία.Εβαλα TOpenDialogs για την επιλογη των αρχείων και εκτελείται! Το νέο προβληματάκι μου εχει να κάνει με το TImage component..Στην βάση μου δεν αποθηκεύω την εικόνα που θέλω για κάθε ενα αντικείμενο ας πούμε αλλά μόνο το Path το οποίο μετά οταν θέλω να εμφανίσω την εικόνα το κάνω ενα απλό > . . . . Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName); . . . . Ομως μόνο .bmp μπορεί να εμφανίσει δυστηχώς καθώς μου πετάει errors σε εικόνες .png , .jpg κ.τ.λ... Τι μπορώ να κάνω; Αν για παράδειγμα θέλεις το TImage αλλά και το TOpenPictureDialog να ανοίγουν αμέσως αρχεία JPG (το πλέον διαδεδομένο format εικόνας σήμερα), απλά συμπεριέλαβε στις δηλώσεις της φόρμας που τα περιέχουν το jpeg.hpp header και είσαι έτοιμος, πχ #include <jpeg.hpp>, τα ανάλογα components της VCL από εδώ και πέρα γνωρίζουν πως να τα διαχειριστούν (για τα PNG, αρκεί να συμπεριλάβεις το pngimage.hpp).
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα