בשקט בשקט יצאה לאוויר העולם גרסה 1.2 הרשמית של FPC/Lazarus, סביבת הפיתוח בקוד פתוח לשפת Object Pascal. נכון להיום, זו האופציה המודרנית היחידה עבור מי שרוצה לתכנת בשפה זו, ולא מוכן למכור כליה בשביל לקנות גרסה מלאה של Delphi. יש בגרסה הזו גם באג קטן ומעצבן מאד, אבל…
למעשה, נתקלתי בבאג כבר בגרסה הקודמת. בכל הטפסים (Forms) של התוכנה, הכותרת יושרה לימין דווקא, בזמן ששאר האלמנטים היו מיושרים לשמאל כרגיל. בעיה דומה הופיעה גם ברכיבים שבתוך הטופס. חיטוט עצבני ברשת העלה בסופו של דבר את מקור הצרה: הקומפיילר זיהה שמערכת ההפעלה שלי עובדת כברירת מחדל עם שפה שנכתבת מימין לשמאל, וניסה להתאים את הגדרות היישום לפי זה, בלי לשים לב להתנגשויות שזה יוצר.
מכאן נבע גם הפתרון: להגדיר ידנית, עבור אובייקט-העל של היישום כולו, את הכיוונים הנכונים לפני שהוא מתחיל ליצור טפסים. זה עבד אבל היה מכוער למדי, ובטח לא משהו שבא לי לעשות בכל תוכנה ותוכנה שאכתוב מהיום והלאה.
הפתרון האלגנטי יותר מסתמך על כך שמדובר, כאמור, בפרויקט קוד פתוח: אם אגלה איפה מסתתרת הבעיה בקוד המקור, אני יכול פשוט לתקן אותה שם, לקמפל הכל מחדש וזהו! נסו לעשות את זה עם באג קטן ומציק בתוכנה שעולה מאות או אלפי דולרים…
אני יודע, הסיכוי שמישהו מכם אשכרה יתקין את לזרוס ויזדקק לתיקון הזה הוא זעיר… אבל למען הסדר הטוב, הנה הפתרון. אי-שם בספריית ההתקנה נמצא קובץ בשם application.inc . שם, בשורה 117, נמצא הטקסט הבא:
LCLGetLanguageIDs(LangDefault, LangFallback); if LangDefault <> '' then FBidiMode := Direction(LangDefault) else FBidiMode := Direction(LangFallback);
אני בעצמי לא יודע את הפרטים המדויקים של מה שקורה שם, רק שהתוצאה של זה היא כיוון אלמנטים לא נכון. סימנתי את בלוק ה-if-else כולו כהערה ושמתי אחרי זה את השורה הבאה:
FBidiMode := bdLeftToRight;
שמרתי את הקובץ ואז, בתפריט הראשי של סביבת הפיתוח, בחרתי Tools->Build Lazarus with Profile: Normal IDE. הקימפול לקח שתיים-שלוש דקות, סביבת הפיתוח נסגרה ונפתחה שוב, וזהו – הכל עובד כמו שצריך. אם רוצים בכל זאת טופס עם אלמנטים מיושרים לימין, אז בוחרים כרגיל בפאנל של תכונות הטופס את הערך bdRightToLeft עבור הפרמטר BiDiMode.
זהו, אפשר לחזור לתכנת. רוצים להוריד את לזרוס למחשב שלכם? קובצי ההתקנה לכל מערכות ההפעלה השונות נמצאים כאן.
אני לא מצליח לכתוב תגובה מכיון שאני נמצא בחו״ל ונחשב ע״י המערכת כספאמר
היי, למעשה אני חושב שהמערכת מסמנת "ספאם" לא לפי מיקום אלא לפי צירוף של קישורים. לא נורא, הנה התגברנו עליה 🙂
למדתי פסקל בערך כשהסתובבו בינינו דינוזאורים. חלונות היו שמועה בלבד. פסקל 5 זה הדבר הכי מתקדם שתיכנתתי בו.
בא לי היום לחזור לתכנת.
הצצתי בלזרוס והמושגים שם הם ממש לא מובנים לי. מישהו יכול להמליץ לי על אתר או אפילו ספר שיעזור לי ללמוד איך לכתנת בסביבה העכשווית?
תודה.
אכן, עברו לא מעט בייטים מתחת לגשר מאז ימי TP5… אבל עיקר ההבדלים הם תוספות לשפה ולא שינויים בבסיס, כך שלא צריך ללמוד הכל מאפס. אם אין לך בעיה עם אנגלית, אני מציע לחפש ספרים משומשים על Delphi 4/5 (או גרסה קרובה) – גם הם עתיקים (ולכן זולים), אבל הם מציגים גרסאות של Object Pascal שכבר קרובות יותר לדיאלקט המודרני, ומהן הקפיצה תהיה קלה יותר בעזרת האינטרנט.
מצאתי את האתר הזה המצורף למטה
http://www.pascal-programming.info/index.php
כמו כן יש לי עותקים ב-pdfים חוקיים שקניתי עם הספרים וכן כל החבילה ללימוד לאזארוס, העניין יחסית פשוט אבל דורש זמן עצום ללימוד, (אני לא חושב שההבנה שלי מספיק טובה לאחר הקריאה מכיון שמדובר על כמות עצומה של מידע שיש צורך ליישם בעת התרגול) אשמח לשתף….
זה נכון. אפילו בפסקל, תכנות זה לא משהו שלומדים בסופ"ש או אפילו בקורס שלם… והעסק הזה רחב ומורכב יותר כיום ממה שהיה פעם.
ודיווחת כאן? http://bugs.freepascal.org/my_view_page.php
יהיה אפילו יותר נחמד אם תציע להם טלאי.
פה זה נהיה קצת מסובך. במהלך החיפושים הסתבר שכבר יש דיווח (פתוח!), מאז 2012 בערך, וכנראה שהוא תוקן באיזשהו שלב וחזר להופיע. כששאלתי על הבעיה בפורומים, וגם כשעניתי לעצמי אחר כך והסברתי ממה היא נובעת, אף אחד לא התייחס. זה מצטרף לדיווח שפתחתי פעם על באג משמעותי יותר, שגם הוא לא זכה למי-יודע-מה התייחסות. כנראה שנושאים כאלה של ממשק לא ממש מעניינים שם את המפתחים, ואני לא מספיק מכיר את המערכת כדי להעלות תיקונים משלי.