פורסם 2010 במאי 1215 שנים שלום לכולםאני בונה משחק(ב VC++ 2008) , ויש בו עורך שלבים כעקרון בניתי אותו פחות או יותר עכשיו החלק הבעייתי בסיפור הוא שמירה/טעינה של השלב שהמשתמש ערך/יצר לשם כך חשבתי לפתוח חלון כמו שיש בכל תוכנה של שמירה (של השלב) בכל מקרה ראיתי שאפשר להשתמש באובייקט SaveFileDialogהבעיה היחידה שחרשתי על האינטרנט ולא מצאתי דוגמא אחת שעובדת כמו שצריך(או שפשוט לא הבנתי איך זה אמור לעבוד)משהו כזה http://www.functionx.com/vccli/controls/save.htmתודה
פורסם 2010 במאי 1215 שנים הצורה הכי פשוטה:SaveFileDialog file_save=new SaveFileDialog(); if (file_save.ShowDialog() == DialogResult.OK) { //שמירת הקובץ //הכתובת של המיקום לקובץ הנבחר: MessageBox.Show(file_save.FileName); } else MessageBox.Show("פעולה לביצוע אם לחצו על ביטול");יש עוד אופציות שניתן לשנות כמו שם קובץ ברירת מחדל, תקית ברירת מחדל, סיומות וכו'...אבל זה יספיק לך.אותו דבר בפתיחת קובץ, רק עם OpenFileDialogאוי סליחה, מה שכתבתי זה ל C#. אבל אני מניח שזה די דומה.
פורסם 2010 במאי 1215 שנים מחבר כעקרון זה משהו בסגנון שאתה רשמת ( יש לי הרגשה שרשמת את הקוד בC# או בVB) בכל מקרהיש לי את הקוד הבאSaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog; saveFileDialog1->CreatePrompt = true; saveFileDialog1->OverwritePrompt = true; saveFileDialog1->Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; saveFileDialog1->FilterIndex = 2; if ( saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK ) { איך אני מקבל את שם הקובץ שבו המשתמש רוצה לשמור את הקבוץ myStream->Close(); } גם קורא דבר מוזר בלי החלק של השמירה התוכנית מתרסקת בשורה של הshoeDialog הודעה שקשורה לthreads או משהו כזה
פורסם 2010 במאי 1215 שנים כן כתבתי בטעות C#, לא מכיר VC++. גם אני נתקלתי בבעיה שלך כשהתנסתי עם זה. זורק EXCEPTION על משהו ככמו CROSS THREADING... לא זוכר. זה קורה כאשר מנסים לפתוח את החלון הזה מ THREAD שהוא לא ראשי. אם אתה עושה את זה מ THREAD אחר, צריך להגדיר אותו כ STA, אני לא ממש זוכר מה זה ולמה זה, ככה פתרתי את זה. עשיתי משהו כזה (שוב, ב C#): clientThread.SetApartmentState(ApartmentState.STA); שם הקובץ עם הניתוב אמור להיות פה: saveFileDialog1->Filename אסור לכתוב או לקרוא לקבצים מ THREAD אחר עד כמה שאני הבנתי. איך ה STA הזה מתקן את זה? אין לי מושג. טוב, חבל על הזמן איזה נכה אני, אני כותב את ההודעה הזאת כאילו זה היה צ'אט, כל שניה נכנס עורך ומוסיף משהו. סיימתי אז אל תחכה לעוד עדכון שלי ---------------------------------------------------------- טוב, יצאתי נכה פעם שניה.... עוד עדכון: (והפעם ב ++VC) בהנחה שאתה עושה את זה מ THREAD אחר, תגדיר אותו ככה ל STA לפני שאתה מפעיל אותו: Thread^ t = gcnew Thread(gcnew ThreadStart(ThreadProc)); t->SetApartmentState(ApartmentState::STA);
פורסם 2010 במאי 1215 שנים מחבר כולנו נכים לפעמים לא נורא... בכל אופן לא הבנתי כל כך את הקטע של הפתיל, אני אמור להריץ את החלון ע"י הפתיל(thread)? עריכה: איך אני משתמש בthreads בC++, איזה אינקלודים צריך?
פורסם 2010 במאי 1215 שנים פתיל... זה חדש לי.לא, אתה לא אמור לעשות את זה, אבל במידה וזה המצב, אז אתה צריך להגדיר את הפתיל כ STA.האם הפונקציה שממנה אתה מפעיל את החלון רצה על THREAD אחר מאשר הראשי??
פורסם 2010 במאי 1215 שנים מחבר פתיל שקול לthread באנגלית בכל מקרה הוא נותן את השגיאות הבאות:1>.\Controller.cpp(105) : error C2065: 'ThreadProc' : undeclared identifier1>.\Controller.cpp(105) : error C3350: 'System::Threading::ThreadStart' : a delegate constructor expects 2 argument(s)1>Generating Code...
פורסם 2010 במאי 1215 שנים לא התכוונתי שתעתיק לתכנית שלך את מה שכתבתי.נתתי לך דוגמא לשנות את המצב של ה THREAD במידה וכבר הגדרת אחד כזה.בוא נחזור כמה צעדים אחורה.מה השגיאה המלאה שאתה מקבל כשאתה קורא ל SAVEFILEDIALOG??ובבקשה תענה לי על השאלה, האם הגדרת בתכנית שלך THREADS כלשהם? אם אתה לא בטוח, אז כנראה שלו.יעזור גם אם תצרף את קטע הקוד המלא (מספיק אולי רק הפונקציה שממנה אתה קורה לחלון של שמירת הקבצים).
פורסם 2010 במאי 1215 שנים מחבר לא השתמשתי בשום threads זאת הפונקציה שליvoid Controller::saveLevel(){ SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog; saveFileDialog1->CreatePrompt = true; saveFileDialog1->OverwritePrompt = true; saveFileDialog1->Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; saveFileDialog1->FilterIndex = 2; if ( saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK ) { //FileStream^myStream = File::Create(saveFileDialog1->FileName); //myStream->Close(); }}וזאת השגיאה שאני מקבל[attachment deleted by admin]
פורסם 2010 במאי 1215 שנים טוב, הפונקציה לבדה עובדת אצלי בסדר, ללא שגיאות.יש מצב אתה מעלה את שאר הקוד?
פורסם 2010 במאי 1215 שנים מחבר אצלך נפתח התפריט של שמירה בשם?עכשיו יצרתי פרוייקט חדש ועדיין הוא נותן את אותה שגיאה, אולי צריך לקנפג את הויזואל כדי שזה יעבוד?עכשיו אני נזכר שהייתי צריך לקנפג אותו שיתמוך ב /clr אם אתה תחת מאפייני פרוייקט (בלי זה הוא לא מתקמפל)
פורסם 2010 במאי 1215 שנים תנסה להוסיף או את השורה הראשונה, או את השורה השנייה, מעל הפונקציה MAIN, כמו פה.(אל תוסיף את שתי השורות עם הסוגריים, רק אחת מהן)[STAThreadAttribute] [STAThread]int main(array<System::String ^> ^args)כולל הסוגריים המרובעים...אני פשוט פתחתי פרוייקט חדש, מסוג WINDOWS FORM APPLICATION.וכן, החלון נפתח.כבר היה רשום אצלי בפרוייקט החדש את ה [sTAThreadAttribute], מחיקה שלו גורמת לאותה שגיאה שציינת.
פורסם 2010 במאי 1215 שנים מחבר שחקת אותה עכשיו איך אני אמור לשמור את הקובץ? אני מגדיר משתנה מסוג ifstream וכותב ישירות לקובץ כמו בprompt רגיל? ועוד שאלה קטנה כשאני פותח קובץ אני אמור להוסיף עוד משהו למעל הmain כי אמרת שצריך להשתמש בopenFileDialog?
פורסם 2010 במאי 1215 שנים כן, צריך את זה גם לגבי ה OPENFILEDIALOG.אני ממליץ לך לחפש קצת חומר באינטרנט... זה לא אמור להיות מסובך.כתיבה לקובץ אמורה להיות באותה צורה כמו שכתבת עד היום.ה SAVEFILEDIALOG הוא בסך הכל דיאלוג שמביא לך את הכתובת של הקובץ שהמשתמש בחר....אני לא בקיא ב C++.חפש מידע על FileStream זה מה שאני מכיר מ C#.אולי גם יש fprintf למצביע לקובץ אין לי מושג....בהצלחה!
פורסם 2010 במאי 1215 שנים אם כבר אתה עובד ב-.net, תעבוד עם זה עד הסוף. אל תכתוב באמצעות fprintf או fstream, אלא תשתמש ב-FileStream.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.