کتابخانه‌ی استاندارد · گرافیک و بازی

پنجره ها gui.window

پنجره‌های بومی که بافری از نقطه‌ها را نشان می‌دهند، با حلقه‌ی رویداد برای اشاره‌گر، صفحه‌کلید، ورود متن، زمان‌سنج و کلیپ‌بورد.

واردسازی رابط گرافیکی.پنجره ها

نام آرگومان‌ها شناسه‌ی خود کد است و معادل فارسی ندارد؛ گونه‌ها، کلیدواژه‌ها و نام بسته‌ها با معادل فارسی نوشته می‌شوند.

پنجره ها پنجره‌های واقعی باز می‌کند و نقطه‌هایی را که خودتان کشیده‌اید نشان می‌دهد. این بسته پایین‌ترین لایه‌ی رابط کاربری بومی سلام است: برنامه یک قاب را در حافظه می‌کشد (برای نمونه با gui.paint) و این بسته آن را روی نمایشگر می‌گذارد و کارهای کاربر را گزارش می‌کند. مستقیم با سیستم کار می‌کند: X11 در لینوکس، Win32 در ویندوز و Cocoa در مک، بی GTK، بی نمای وب و بی هیچ کتابخانه‌ی دیگر. پشتیبان بی‌سر پنجره‌ها را در حافظه نگه می‌دارد تا همان برنامه روی هر دستگاهی آزموده شود.

هر قاب بافری از نقطه‌های ۳۲ بیتی با آلفای پیش‌ضرب‌شده است، با مقدار 0xAARRGGBB (در حافظه بایت‌های B، G، R، A)، که با یک اشاره‌گر، پهنا، بلندی و گام سطر توصیف می‌شود. اندازه‌ها و جاها در این بسته بر حسب نقطه‌ی منطقی‌اند؛ بافر بر حسب نقطه‌ی فیزیکی است، یعنی اندازه‌ی منطقی ضرب در ضریب مقیاس.

  • رویدادها کشیده می‌شوند نه رانده: انتظار رویداد را در یک حلقه صدا بزنید. مک همین را می‌خواهد، چون پنجره‌هایش تنها در رشته‌ی اصلی کار می‌کنند.
  • بستن یک درخواست است. دکمه‌ی بستن درخواست بستن می‌فرستد و پنجره تا صدا زدن بستن می‌ماند.
  • درخواست‌های بازکشی یکی می‌شوند. درخواست بازکشی دوباره را هر چند بار صدا بزنید، یک درخواست بازکشی می‌رسد.
  • کلید و متن جدا هستند. فشردن کلید کلید را با جایش نام می‌برد که در هر زبان صفحه‌کلید یکی است؛ نویسه‌ها در ورود متن و از نویسه‌ساز در پیش نویس نویسه ساز و ثبت نویسه ساز می‌آیند.

متن یک رویداد از آن بسته است و در انتظار رویداد یا سرکشی رویداد بعدی آزاد می‌شود. اگر نگهش می‌دارید رونوشت بگیرید.

حلقه‌ی رویداد

برنامه‌ی پنجره‌ای یک پنجره باز می‌کند و تا بسته شدنش منتظر رویداد می‌ماند. درخواست بازکشی یک قاب می‌خواهد: بافری به اندازه‌ی فیزیکی بسازید، پرش کنید و به ارائه کامل بدهید. یک زمان‌سنج تکرارشونده هر چه را با زمان تغییر می‌کند می‌راند. این نمونه بی‌سر است و ساعت آزمون را به کار می‌برد، پس همه‌جا اجرا می‌شود و هر بار همان خط‌ها را چاپ می‌کند؛ بی بی سر و تنظیم ساعت دستی همین حلقه یک پنجره‌ی واقعی را می‌راند.

gui-window-guide-loop.salam
// زبان: فارسی
واردسازی رابط گرافیکی.پنجره ها
واردسازی حافظه

تابع paint(w: پنجره ها.پنجره، frame: صحیح):
    size := w.اندازه()
    width := size.پهنای فیزیکی
    height := size.بلندی فیزیکی
    pixels := حافظه.تخصیص صفرشده(((width * height) * 4) برگردان طبیعی۶۴) برگردان طبیعی۳۲*
    دیرکن حافظه.آزادسازی(pixels برگردان تهی*)
    shade := (frame * 40) برگردان طبیعی۳۲
    تکرار width * height در i:
        pixels[i] = (0xFF000000 برگردان طبیعی۳۲) | (shade << 8)
    پایان
    w.ارائه کامل(pixels برگردان تهی*، width، height، width * 4)
پایان

تابع ریشه:
    پنجره ها.تنظیم ساعت دستی(درست)
    w := پنجره ها.باز کردن(پنجره ها.گزینه‌پنجره { عنوان = "Clock"، پهنا = 64.0، بلندی = 48.0، بی سر = درست })
    tick := پنجره ها.تنظیم زمان سنج(500، درست)
    ناپایا frames := 0
    تا w.باز است():
        e := پنجره ها.انتظار رویداد(-1)
        ترابرد e.نوع:
            پنجره ها.نوع‌رویداد.درخواست بازکشی:
                paint(w، frames)
                frames++
                سرچاپ "frame"، frames، "at"، پنجره ها.ساعت()، "ms"
                بشکن
            پایان
            پنجره ها.نوع‌رویداد.زنگ زمان سنج:
                w.درخواست بازکشی دوباره()
                اگر frames برابر 3:
                    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.درخواست بستن، شماره پنجره = w.شناسه })
                پایان
                بشکن
            پایان
            پنجره ها.نوع‌رویداد.درخواست بستن:
                سرچاپ "closing"
                پنجره ها.پاک کردن زمان سنج(tick)
                w.بستن()
                بشکن
            پایان
            وگرنه:
                بشکن
            پایان
        پایان
    پایان
    سرچاپ "presented"، w.شمار ارائه()، "frames"
پایان
خروجیframe 1 at 0 ms frame 2 at 500 ms frame 3 at 1000 ms closing presented 3 frames

موشی، کلید و متن

رویدادهای اشاره‌گر جای منطقی و دکمه را دارند. شمار کلیک دوکلیک و سه‌کلیک را می‌شمارد: فشردن‌های یک دکمه که در زمان و جا نزدیک هم باشند. رویداد کلید، کلید را با کلیدها و جایش، و کد خود سیستم را در کد فیزیکی می‌دهد. متن هرگز از رویداد کلید نمی‌آید: متن ورود متن و ثبت نویسه ساز را درج کنید و پیش نویس نویسه ساز را با زیرخط بکشید. تنظیم جای نویسه ساز پنجره‌ی پیشنهادهای نویسه‌ساز را کنار نشانگر شما می‌برد.

gui-window-guide-input.salam
// زبان: فارسی
واردسازی رابط گرافیکی.پنجره ها

تابع ریشه:
    پنجره ها.تنظیم ساعت دستی(درست)
    w := پنجره ها.باز کردن(پنجره ها.گزینه‌پنجره { پهنا = 300.0، بلندی = 200.0، بی سر = درست، نمایان = نادرست })
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.فشردن دکمه، شماره پنجره = w.شناسه، ایکس = 40.0، ایگرگ = 30.0، دکمه = پنجره ها.دکمه‌موشی.دکمه چپ })
    پنجره ها.جلو بردن ساعت(120)
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.فشردن دکمه، شماره پنجره = w.شناسه، ایکس = 41.0، ایگرگ = 30.0، دکمه = پنجره ها.دکمه‌موشی.دکمه چپ })
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.فشردن کلید، شماره پنجره = w.شناسه، کلید = پنجره ها.کلیدها.کلید ای، کد فیزیکی = 38 })
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.ورود متن، شماره پنجره = w.شناسه، متن = "a" })
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.پیش نویس نویسه ساز، شماره پنجره = w.شناسه، متن = "سل"، جای نشانگر = 4 })
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.ثبت نویسه ساز، شماره پنجره = w.شناسه، متن = "سلام" })
    ناپایا e := پنجره ها.سرکشی رویداد()
    تا e.نوع نابرابر پنجره ها.نوع‌رویداد.هیچ رویداد:
        ترابرد e.نوع:
            پنجره ها.نوع‌رویداد.فشردن دکمه:
                سرچاپ "click"، e.شمار کلیک، "at"، e.ایکس، e.ایگرگ
                بشکن
            پایان
            پنجره ها.نوع‌رویداد.فشردن کلید:
                سرچاپ "key A:"، e.کلید برابر پنجره ها.کلیدها.کلید ای
                بشکن
            پایان
            پنجره ها.نوع‌رویداد.ورود متن، پنجره ها.نوع‌رویداد.ثبت نویسه ساز:
                سرچاپ "insert"، e.متن
                بشکن
            پایان
            پنجره ها.نوع‌رویداد.پیش نویس نویسه ساز:
                سرچاپ "composing"، e.متن، "caret at byte"، e.جای نشانگر
                بشکن
            پایان
            وگرنه:
                بشکن
            پایان
        پایان
        e = پنجره ها.سرکشی رویداد()
    پایان
    w.تنظیم جای نویسه ساز(40.0، 30.0، 2.0، 18.0)
    سرچاپ "candidate window goes to"، w.جای نویسه ساز()
پایان
خروجیclick 1 at 40 30 click 2 at 41 30 key A: true insert a composing سل caret at byte 4 insert سلام candidate window goes to Rect {x = 40, y = 30, width = 2, height = 18}

ضریب مقیاس و به‌روزرسانی بخشی

در نمایشگر پرتراکم هر نقطه‌ی منطقی چند نقطه‌ی دستگاه است. بر حسب نقطه‌ی فیزیکی بکشید و برای تبدیل از ضریب مقیاس بهره بگیرید. بردن پنجره به نمایشگری دیگر تغییر مقیاس و سپس تغییر اندازه می‌فرستد. وقتی تنها بخشی از قاب عوض شده، مستطیل‌های تغییرکرده را به ارائه بدهید؛ تنها همان‌ها رونویسی و در مرز بافر بریده می‌شوند.

gui-window-guide-hidpi.salam
// زبان: فارسی
واردسازی رابط گرافیکی.پنجره ها
واردسازی حافظه

تابع ریشه:
    w := پنجره ها.باز کردن(پنجره ها.گزینه‌پنجره { پهنا = 100.0، بلندی = 50.0، بی سر = درست، مقیاس = 1.5، نمایان = نادرست })
    size := w.اندازه()
    سرچاپ "logical"، size.پهنا، size.بلندی، "physical"، size.پهنای فیزیکی، size.بلندی فیزیکی
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.تغییر مقیاس، شماره پنجره = w.شناسه، مقیاس = 2.0 })
    e := پنجره ها.سرکشی رویداد()
    سرچاپ "new scale"، e.مقیاس، "logical"، e.پهنا، e.بلندی، "physical"، e.پهنای فیزیکی، e.بلندی فیزیکی
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.تغییر اندازه، شماره پنجره = w.شناسه، پهنای فیزیکی = 300، بلندی فیزیکی = 100 })
    r := پنجره ها.سرکشی رویداد()
    سرچاپ "resized to"، r.پهنا، r.بلندی
    width := r.پهنای فیزیکی
    height := r.بلندی فیزیکی
    pixels := حافظه.تخصیص صفرشده(((width * height) * 4) برگردان طبیعی۶۴) برگردان طبیعی۳۲*
    دیرکن حافظه.آزادسازی(pixels برگردان تهی*)
    w.ارائه کامل(pixels برگردان تهی*، width، height، width * 4)
    ناپایا damage := وکتور {} برگردان وکتور<پنجره ها.مستطیل>
    دیرکن damage.آزادکن()
    damage.بیفزا(پنجره ها.مستطیل { ایکس = 10، ایگرگ = 10، پهنا = 20، بلندی = 8 })
    damage.بیفزا(پنجره ها.مستطیل { ایکس = 290، ایگرگ = 90، پهنا = 50، بلندی = 50 })
    w.ارائه(pixels برگردان تهی*، width، height، width * 4، damage)
    سرچاپ "copied"، w.شمار آخرین ناحیه ها()، "rects inside"، w.آخرین ناحیه تغییر()
پایان
خروجیlogical 100 50 physical 150 75 new scale 2 logical 75 37.5 physical 150 75 resized to 150 50 copied 2 rects inside Rect {x = 10, y = 10, width = 290, height = 90}

آزمون بدون نمایشگر

پنجره‌ی بی‌سر مانند پنجره‌ی واقعی رفتار می‌کند: تمرکز، درخواست بازکشی، تغییر اندازه و زمان‌سنج می‌گیرد و هر قاب ارائه‌شده را نگه می‌دارد. نقطه در قاب را بازمی‌خواند، تزریق رویداد هر رویدادی را پخش می‌کند و تنظیم ساعت دستی زمان را یک‌راست به زمان‌سنج بعدی می‌پراند، پس آزمون یک پویانمایی یک‌ثانیه‌ای زمانی نمی‌برد. متغیر محیطی SALAM_WINDOW_BACKEND=headless همه‌ی پنجره‌ها را بی آن‌که برنامه عوض شود بی‌سر می‌کند.

gui-window-guide-testing.salam
// زبان: فارسی
واردسازی رابط گرافیکی.پنجره ها
واردسازی حافظه

تابع ریشه:
    پنجره ها.تنظیم ساعت دستی(درست)
    w := پنجره ها.باز کردن(پنجره ها.گزینه‌پنجره { پهنا = 2.0، بلندی = 2.0، بی سر = درست، نمایان = نادرست })
    pixels := حافظه.تخصیص صفرشده(16 برگردان طبیعی۶۴) برگردان طبیعی۳۲*
    دیرکن حافظه.آزادسازی(pixels برگردان تهی*)
    pixels[0] = 0xFFFF0000 برگردان طبیعی۳۲
    pixels[3] = 0x80000080 برگردان طبیعی۳۲
    w.ارائه کامل(pixels برگردان تهی*، 2، 2، 8)
    سرچاپ "top left red:"، w.نقطه در(0، 0) برابر (0xFFFF0000 برگردان طبیعی۳۲)
    سرچاپ "bottom right half blue:"، w.نقطه در(1، 1) برابر (0x80000080 برگردان طبیعی۳۲)
    timer := پنجره ها.تنظیم زمان سنج(1000، نادرست)
    ناپایا e := پنجره ها.انتظار رویداد(-1)
    تا e.نوع نابرابر پنجره ها.نوع‌رویداد.زنگ زمان سنج:
        سرچاپ "skipped event"، e.نوع برگردان صحیح
        e = پنجره ها.انتظار رویداد(-1)
    پایان
    سرچاپ "timer"، e.زمان سنج برابر timer، "after"، پنجره ها.ساعت()، "ms of test time"
    w.بستن()
پایان
خروجیtop left red: true bottom right half blue: true skipped event 4 timer true after 1000 ms of test time
سیستمپشتیبانیادداشت
لینوکسX11 با libX11XPutImage برای هر مستطیل تغییرکرده، Xft.dpi برای مقیاس، XIM برای نویسه‌ساز، گزینش CLIPBOARD. نشست‌های Wayland از XWayland بهره می‌گیرند.
ویندوزWin32بخش DIB و BitBlt، DPI برای هر نمایشگر، ترکیب IME، کلیپ‌بورد یونیکد و نمای تیره از رجیستری.
مکCocoaنمای لایه‌دار، NSTextInputClient برای نویسه‌ساز، NSPasteboard و نمای سیستم.
همهبی‌سردرون حافظه، برای آزمون و رسم در پرونده.

گونه‌ها

مستطیل Rect

ساختار مستطیل
مستطیلی بر حسب نقطه‌ی فیزیکی: ناحیه‌های تغییر ارائه و ناحیه‌ی نویسه‌ساز.
نامانگلیسیگونهتوضیح
ایکسxصحیح = 0لبه‌ی چپ بر حسب نقطه.
ایگرگyصحیح = 0لبه‌ی بالا بر حسب نقطه.
پهناwidthصحیح = 0پهنا بر حسب نقطه.
بلندیheightصحیح = 0بلندی بر حسب نقطه.
gui-window-Present.salam
// زبان: فارسی
واردسازی رابط گرافیکی.پنجره ها
واردسازی حافظه

تابع ریشه:
    w := پنجره ها.باز کردن(پنجره ها.گزینه‌پنجره { پهنا = 4.0، بلندی = 3.0، بی سر = درست })
    pixels := حافظه.تخصیص صفرشده((4 * 3 * 4) برگردان طبیعی۶۴) برگردان طبیعی۳۲*
    دیرکن حافظه.آزادسازی(pixels برگردان تهی*)
    تکرار 12 در i:
        pixels[i] = 0xFF336699 برگردان طبیعی۳۲
    پایان
    سرچاپ w.ارائه کامل(pixels برگردان تهی*، 4، 3، 16)، w.شمار ارائه()، w.آخرین ناحیه تغییر()
    pixels[5] = 0xFFFF0000 برگردان طبیعی۳۲
    ناپایا damage := وکتور {} برگردان وکتور<پنجره ها.مستطیل>
    دیرکن damage.آزادکن()
    damage.بیفزا(پنجره ها.مستطیل { ایکس = 1، ایگرگ = 1، پهنا = 1، بلندی = 1 })
    سرچاپ w.ارائه(pixels برگردان تهی*، 4، 3، 16، damage)، w.آخرین ناحیه تغییر()، w.شمار آخرین ناحیه ها()
    سرچاپ w.نقطه در(1، 1) برابر (0xFFFF0000 برگردان طبیعی۳۲)، w.نقطه نمایش داده شده(0، 0) برابر (0xFF336699 برگردان طبیعی۳۲)
    سرچاپ w.تنظیم نماد(pixels برگردان تهی*، 2، 2، 16)
    w.بستن()
پایان
خروجیtrue 1 Rect {x = 0, y = 0, width = 4, height = 3} true Rect {x = 1, y = 1, width = 1, height = 1} 1 true true true

اندازه‌پنجره WindowSize

ساختار اندازه‌پنجره
اندازه‌ی ناحیه‌ی رسم پنجره بر حسب نقطه‌ی منطقی و فیزیکی، همان که اندازه برمی‌گرداند.
نامانگلیسیگونهتوضیح
پهناwidthاعشار۶۴ = 0پهنا بر حسب نقطه‌ی منطقی.
بلندیheightاعشار۶۴ = 0بلندی بر حسب نقطه‌ی منطقی.
پهنای فیزیکیphysical_widthصحیح = 0پهنا بر حسب نقطه‌ی دستگاه: پهنای بافری که باید کشید.
بلندی فیزیکیphysical_heightصحیح = 0بلندی بر حسب نقطه‌ی دستگاه.
gui-window-Open.salam
// زبان: فارسی
واردسازی رابط گرافیکی.پنجره ها

تابع ریشه:
    options := پنجره ها.گزینه‌پنجره {
        عنوان = "Notes"، پهنا = 400.0، بلندی = 300.0، کمترین پهنا = 200.0، کمترین بلندی = 150.0،
        بیشترین پهنا = 800.0، بیشترین بلندی = 600.0، تغییرپذیر = درست، قاب دار = درست، وسط صفحه نمایش = درست،
        ایکس = 0.0، ایگرگ = 0.0، رنگ زمینه = 0xF5F5F5FF برگردان طبیعی۳۲، نمایان = درست، بی سر = درست، مقیاس = 2.0
    }
    w := پنجره ها.باز کردن(options)
    سرچاپ w.شناسه، w.باز است()، w.بی سر است()، w.متمرکز است()، w.عنوان پنجره()
    size := w.اندازه()
    سرچاپ size.پهنا، size.بلندی، size.پهنای فیزیکی، size.بلندی فیزیکی، w.ضریب مقیاس()
    w.تنظیم عنوان("Notes (2)")
    w.تنظیم اندازه(1000.0، 100.0)
    سرچاپ w.عنوان پنجره()، w.اندازه()
    w.تنظیم کمترین اندازه(100.0، 100.0)
    w.تنظیم بیشترین اندازه(0.0، 0.0)
    w.تنظیم اندازه(1000.0، 100.0)
    سرچاپ w.اندازه()
    w.تنظیم نشانگر(پنجره ها.شکل‌نشانگر.نشانگر دست)
    w.تنظیم جای نویسه ساز(20.0، 40.0، 2.0، 16.0)
    سرچاپ w.نشانگر کنونی() برابر پنجره ها.شکل‌نشانگر.نشانگر دست، w.جای نویسه ساز()
    w.تنظیم تمام صفحه(درست)
    سرچاپ w.تمام صفحه است()
    w.تنظیم تمام صفحه(نادرست)
    w.کمینه کردن()
    w.بیشینه کردن()
    w.بازگرداندن()
    w.متمرکز کردن()
    w.درخواست بازکشی دوباره()
    سرچاپ w.دستگیره() برابر پوچ
    w.بستن()
    سرچاپ w.باز است()
پایان
خروجی0 true true true Notes 400 300 800 600 2 Notes (2) WindowSize {width = 800, height = 150, physical_width = 1600, physical_height = 300} WindowSize {width = 1000, height = 100, physical_width = 2000, physical_height = 200} true Rect {x = 20, y = 40, width = 2, height = 16} true true false

نوع‌رویداد EventKind

جداشمار نوع‌رویداد
این‌که یک رویداد از چه خبر می‌دهد.
نامانگلیسیگونهتوضیح
هیچ رویدادNoneپیش از پایان زمان انتظار چیزی رخ نداد.
درخواست بستنCloseRequestedکاربر بستن پنجره را خواست. تا بستن را صدا نزنید چیزی بسته نمی‌شود.
تغییر اندازهResizedاندازه‌ی ناحیه‌ی رسم عوض شد؛ پهنا، بلندی و فیلدهای فیزیکی اندازه‌ی تازه را دارند.
تغییر مقیاسScaleChangedپنجره به نمایشگری با ضریب مقیاس دیگر رفت؛ مقیاس آن را دارد.
درخواست بازکشیRedrawRequestedاکنون یک قاب بکشید و ارائه کنید. چند درخواست در یک دور یکی می‌شوند.
گرفتن تمرکزFocusInپنجره تمرکز صفحه‌کلید را گرفت.
از دست دادن تمرکزFocusOutپنجره تمرکز صفحه‌کلید را از دست داد.
حرکت اشاره گرPointerMoveاشاره‌گر جابه‌جا شد؛ ایکس و ایگرگ بر حسب نقطه‌ی منطقی‌اند.
ورود اشاره گرPointerEnterاشاره‌گر وارد پنجره شد.
خروج اشاره گرPointerLeaveاشاره‌گر از پنجره بیرون رفت.
فشردن دکمهPointerDownدکمه‌ای از موشی فشرده شد؛ دکمه و شمار کلیک را ببینید.
رها کردن دکمهPointerUpدکمه‌ای از موشی رها شد.
چرخش چرخWheelچرخ یا صفحه‌ی لمسی پیمایش کرد؛ فیلدهای جابجایی را ببینید.
فشردن کلیدKeyDownکلیدی فشرده شد یا تکرار می‌شود.
رها کردن کلیدKeyUpکلیدی رها شد.
ورود متنTextInputمتن تایپ‌شده، جدا از رویدادهای کلید، در متن.
پیش نویس نویسه سازImePreeditمتن در حال ساخت نویسه‌ساز عوض شد؛ متن خالی یعنی تمام شد.
ثبت نویسه سازImeCommitنویسه‌ساز متن را ثبت کرد.
تغییر طرح رنگColorSchemeChangedسیستم میان روشن و تیره جابه‌جا شد؛ طرح را ببینید.
زنگ زمان سنجTimerزمان‌سنجی از تنظیم زمان سنج زنگ زد؛ زمان سنج شماره‌ی آن است.
بیدارباشWakeرشته‌ی دیگری بیدار کردن را صدا زد.
gui-window-Event.salam
// زبان: فارسی
واردسازی رابط گرافیکی.پنجره ها

تابع ریشه:
    پنجره ها.تنظیم ساعت دستی(درست)
    w := پنجره ها.باز کردن(پنجره ها.گزینه‌پنجره { پهنا = 300.0، بلندی = 200.0، بی سر = درست })
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.فشردن دکمه، شماره پنجره = w.شناسه، ایکس = 10.0، ایگرگ = 20.0، دکمه = پنجره ها.دکمه‌موشی.دکمه چپ })
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.فشردن دکمه، شماره پنجره = w.شناسه، ایکس = 10.0، ایگرگ = 20.0، دکمه = پنجره ها.دکمه‌موشی.دکمه چپ })
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.فشردن کلید، شماره پنجره = w.شناسه، کلید = پنجره ها.کلیدها.کلید ورود، کد فیزیکی = 36، کلیدهای تغییر = پنجره ها.تغییرکنترل })
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.ورود متن، شماره پنجره = w.شناسه، متن = "سلام" })
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.چرخش چرخ، شماره پنجره = w.شناسه، جابجایی عمودی = 1.0، واحد جابجایی = پنجره ها.واحدچرخش.چرخش خطی })
    ناپایا e := پنجره ها.سرکشی رویداد()
    تا e.نوع نابرابر پنجره ها.نوع‌رویداد.هیچ رویداد:
        ترابرد e.نوع:
            پنجره ها.نوع‌رویداد.فشردن دکمه:
                سرچاپ "down"، e.ایکس، e.ایگرگ، e.دکمه برابر پنجره ها.دکمه‌موشی.دکمه چپ، "clicks"، e.شمار کلیک
                بشکن
            پایان
            پنجره ها.نوع‌رویداد.فشردن کلید:
                سرچاپ "key"، e.کلید برابر پنجره ها.کلیدها.کلید ورود، e.کد فیزیکی، (e.کلیدهای تغییر & پنجره ها.تغییرکنترل) نابرابر 0، e.تکراری
                بشکن
            پایان
            پنجره ها.نوع‌رویداد.ورود متن:
                سرچاپ "text"، e.متن
                بشکن
            پایان
            پنجره ها.نوع‌رویداد.چرخش چرخ:
                سرچاپ "wheel"، e.جابجایی افقی، e.جابجایی عمودی، e.واحد جابجایی برابر پنجره ها.واحدچرخش.چرخش خطی
                بشکن
            پایان
            وگرنه:
                سرچاپ "other"، e.نوع برگردان صحیح، e.شماره پنجره
                بشکن
            پایان
        پایان
        e = پنجره ها.انتظار رویداد(0)
    پایان
    w.بستن()
پایان
خروجیother 5 0 down 10 20 true clicks 1 down 10 20 true clicks 2 key true 36 true false text سلام wheel 0 1 true other 4 0

دکمه‌موشی MouseButton

جداشمار دکمه‌موشی
یکی از دکمه‌های موشی.
نامانگلیسیگونهتوضیح
بدون دکمهNoneبدون دکمه، مانند رویداد حرکت.
دکمه چپLeftدکمه‌ی اصلی.
دکمه راستRightدکمه‌ی دوم.
دکمه میانیMiddleدکمه‌ی چرخ.
دکمه عقبBackدکمه‌ی کناری عقب.
دکمه جلوForwardدکمه‌ی کناری جلو.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

واحدچرخش WheelMode

جداشمار واحدچرخش
یکای جابجایی‌های رویداد چرخ.
نامانگلیسیگونهتوضیح
چرخش نقطه ایPixelنقطه‌ی منطقی، از صفحه‌ی لمسی یا چرخ دقیق.
چرخش خطیLineخط، از چرخ پله‌دار موشی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

طرح‌رنگ ColorScheme

جداشمار طرح‌رنگ
نمای روشن یا تیره‌ی سیستم.
نامانگلیسیگونهتوضیح
روشنLightنمای روشن.
تیرهDarkنمای تیره.
gui-window-App.salam
// زبان: فارسی
واردسازی رابط گرافیکی.پنجره ها
واردسازی حافظه

تابع ریشه:
    first := پنجره ها.باز کردن(پنجره ها.گزینه‌پنجره { بی سر = درست، نمایان = نادرست })
    second := پنجره ها.باز کردن(پنجره ها.گزینه‌پنجره { بی سر = درست، نمایان = نادرست })
    سرچاپ پنجره ها.شمار پنجره های باز()، first.شناسه، second.شناسه
    سرچاپ پنجره ها.تنظیم متن کلیپ بورد("hello")
    text := پنجره ها.متن کلیپ بورد()
    سرچاپ text
    حافظه.آزادسازی(text برگردان تهی*)
    سرچاپ پنجره ها.طرح رنگ کنونی() برابر پنجره ها.طرح‌رنگ.روشن
    پنجره ها.تزریق رویداد(پنجره ها.رویداد { نوع = پنجره ها.نوع‌رویداد.تغییر طرح رنگ، طرح = پنجره ها.طرح‌رنگ.تیره })
    e := پنجره ها.سرکشی رویداد()
    سرچاپ e.طرح برابر پنجره ها.طرح‌رنگ.تیره، پنجره ها.طرح رنگ کنونی() برابر پنجره ها.طرح‌رنگ.تیره
    سرچاپ پنجره ها.آخرین خطا() برابر ""
    second.بستن()
    سرچاپ پنجره ها.شمار پنجره های باز()
پایان
خروجی2 0 1 true hello true true true true 1

شکل‌نشانگر Cursor

جداشمار شکل‌نشانگر
شکل اشاره‌گر موشی روی پنجره.
نامانگلیسیگونهتوضیح
نشانگر پیش فرضDefaultپیکان.
نشانگر دستPointerدست، برای پیوندها و دکمه‌ها.
نشانگر متنTextنشانگر متن.
نشانگر انتظارWaitمشغول. مک نشانگر مشغول همگانی ندارد و پیکان نشان می‌دهد.
نشانگر بعلاوهCrosshairنشانگر ضربدری برای نشانه‌گیری دقیق.
نشانگر جابجاییMoveجابه‌جایی به هر سو.
نشانگر کشش افقیResizeHorizontalتغییر اندازه به چپ و راست.
نشانگر کشش عمودیResizeVerticalتغییر اندازه به بالا و پایین.
نشانگر کشش مورب بالاResizeDiagonalUpتغییر اندازه در قطر پایین‌چپ به بالاراست.
نشانگر کشش مورب پایینResizeDiagonalDownتغییر اندازه در قطر بالاچپ به پایین‌راست.
نشانگر ممنوعNotAllowedممنوع.
نشانگر پنهانHiddenبی‌اشاره‌گر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

کلیدها Key

جداشمار کلیدها
کلیدی با جای آن روی صفحه‌کلید، نام‌گذاری‌شده بر پایه‌ی چیدمان آمریکایی، پس با زبان صفحه‌کلید عوض نمی‌شود. برای نویسه‌های تایپ‌شده از رویداد ورود متن بهره بگیرید.
نامانگلیسیگونهتوضیح
کلید ناشناختهUnknownکلید ناشناخته، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید ایAکلید ای، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید بیBکلید بی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید سیCکلید سی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید دیDکلید دی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اییEکلید ایی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید افFکلید اف، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید جیGکلید جی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اچHکلید اچ، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید آیIکلید آی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید جهJکلید جه، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید کیKکلید کی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید الLکلید ال، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید امMکلید ام، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید انNکلید ان، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اوOکلید او، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید پیPکلید پی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید کیوQکلید کیو، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید آرRکلید آر، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اسSکلید اس، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید تیTکلید تی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید یوUکلید یو، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید ویVکلید وی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید دبلیوWکلید دبلیو، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اکسXکلید اکس، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید وایYکلید وای، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید زدZکلید زد، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید صفرDigit0کلید صفر، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید یکDigit1کلید یک، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید دوDigit2کلید دو، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید سهDigit3کلید سه، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید چهارDigit4کلید چهار، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید پنجDigit5کلید پنج، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید ششDigit6کلید شش، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید هفتDigit7کلید هفت، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید هشتDigit8کلید هشت، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید نهDigit9کلید نه، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۱F1کلید اف۱، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۲F2کلید اف۲، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۳F3کلید اف۳، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۴F4کلید اف۴، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۵F5کلید اف۵، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۶F6کلید اف۶، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۷F7کلید اف۷، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۸F8کلید اف۸، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۹F9کلید اف۹، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۱۰F10کلید اف۱۰، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۱۱F11کلید اف۱۱، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اف۱۲F12کلید اف۱۲، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید گریزEscapeکلید گریز، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید ورودEnterکلید ورود، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید جهشTabکلید جهش، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید پس‌زنBackspaceکلید پس‌زن، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید فاصلهSpaceکلید فاصله، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید درجInsertکلید درج، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید حذفDeleteکلید حذف، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید آغاز خطHomeکلید آغاز خط، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید انتهای خطEndکلید انتهای خط، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید برگ بالاPageUpکلید صفحه بالا، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید برگ پایینPageDownکلید صفحه پایین، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید چپLeftکلید چپ، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید راستRightکلید راست، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید بالاUpکلید بالا، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید پایینDownکلید پایین، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید شیفت چپShiftLeftکلید شیفت چپ، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید شیفت راستShiftRightکلید شیفت راست، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید کنترل چپControlLeftکلید کنترل چپ، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید کنترل راستControlRightکلید کنترل راست، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید آلت چپAltLeftکلید آلت چپ، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید آلت راستAltRightکلید آلت راست، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید سوپر چپSuperLeftکلید سوپر چپ، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید سوپر راستSuperRightکلید سوپر راست، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید قفل بزرگCapsLockکلید قفل بزرگ، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید منهاMinusکلید منها، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید مساویEqualکلید مساوی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید کروشه بازBracketLeftکلید کروشه باز، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید کروشه بستهBracketRightکلید کروشه بسته، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید بک اسلشBackslashکلید بک اسلش، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید نقطه ویرگولSemicolonکلید نقطه ویرگول، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید نقل قولQuoteکلید نقل قول، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید بک کوتBackquoteکلید بک کوت، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید ویرگولCommaکلید ویرگول، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید نقطهPeriodکلید نقطه، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید اسلشSlashکلید اسلش، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید بک اسلش جهانیIntlBackslashکلید بک اسلش جهانی، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی صفرNumpad0کلید عددی صفر، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی یکNumpad1کلید عددی یک، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی دوNumpad2کلید عددی دو، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی سهNumpad3کلید عددی سه، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی چهارNumpad4کلید عددی چهار، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی پنجNumpad5کلید عددی پنج، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی ششNumpad6کلید عددی شش، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی هفتNumpad7کلید عددی هفت، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی هشتNumpad8کلید عددی هشت، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی نهNumpad9کلید عددی نه، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی جمعNumpadAddکلید عددی جمع، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی تفریقNumpadSubtractکلید عددی تفریق، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی ضربNumpadMultiplyکلید عددی ضرب، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی تقسیمNumpadDivideکلید عددی تقسیم، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی ممیزNumpadDecimalکلید عددی ممیز، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید عددی ورودNumpadEnterکلید عددی ورود، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید قفل اعدادNumLockکلید قفل اعداد، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید قفل پیمایشScrollLockکلید قفل پیمایش، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید تصویربرداریPrintScreenکلید چاپ صفحه، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید مکثPauseکلید مکث، شناخته‌شده با جای آن روی صفحه‌کلید.
کلید منوی زمینهContextMenuکلید منوی زمینه، شناخته‌شده با جای آن روی صفحه‌کلید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

گزینه‌پنجره Options

ساختار گزینه‌پنجره
چگونگی باز کردن یک پنجره. اندازه‌ها بر حسب نقطه‌ی منطقی‌اند.
نامانگلیسیگونهتوضیح
عنوانtitleرشته = "Salam"متن نوار عنوان.
پهناwidthاعشار۶۴ = 800پهنای ناحیه‌ی رسم.
بلندیheightاعشار۶۴ = 600بلندی ناحیه‌ی رسم.
کمترین پهناmin_widthاعشار۶۴ = 0کمترین پهنایی که کاربر می‌تواند بکشد؛ ۰ یعنی بی‌مرز.
کمترین بلندیmin_heightاعشار۶۴ = 0کمترین بلندی؛ ۰ یعنی بی‌مرز.
بیشترین پهناmax_widthاعشار۶۴ = 0بیشترین پهنا؛ ۰ یعنی بی‌مرز.
بیشترین بلندیmax_heightاعشار۶۴ = 0بیشترین بلندی؛ ۰ یعنی بی‌مرز.
تغییرپذیرresizableمنطقی = درستآیا کاربر می‌تواند اندازه را عوض کند.
قاب دارdecoratedمنطقی = درستآیا پنجره نوار عنوان و قاب دارد.
وسط صفحه نمایشcenteredمنطقی = درستدر میانه‌ی نمایشگر باز شود، نه در ایکس و ایگرگ.
ایکسxاعشار۶۴ = 0لبه‌ی چپ روی نمایشگر، وقتی در میانه نیست.
ایگرگyاعشار۶۴ = 0لبه‌ی بالا روی نمایشگر، وقتی در میانه نیست.
رنگ زمینهbackgroundطبیعی۳۲ = 4294967295رنگی که پیش از نخستین قاب دیده می‌شود، به شکل 0xRRGGBBAA.
نمایانvisibleمنطقی = درستپنجره همان دم باز شدن نمایش داده شود.
بی سرheadlessمنطقی = نادرستپنجره تنها در حافظه بماند، برای آزمون و رسم بدون نمایشگر.
مقیاسscaleاعشار۶۴ = 0ضریب مقیاس را ثابت می‌کند؛ ۰ آن را از سیستم (یا SALAM_SCALE_FACTOR) می‌پرسد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

رویداد Event

ساختار رویداد
یک رویداد از انتظار رویداد یا سرکشی رویداد. تنها فیلدهایی که به نوع آن می‌خورند پر می‌شوند.
نامانگلیسیگونهتوضیح
نوعkindنوع‌رویدادآنچه رخ داد.
شماره پنجرهwindowصحیح = -1شناسهی پنجره‌ی رویداد، یا ‎-۱ برای رویدادهای برنامه.
ایکسxاعشار۶۴ = 0جای اشاره‌گر از چپ، نقطه‌ی منطقی.
ایگرگyاعشار۶۴ = 0جای اشاره‌گر از بالا، نقطه‌ی منطقی.
پهناwidthاعشار۶۴ = 0پهنای منطقی تازه.
بلندیheightاعشار۶۴ = 0بلندی منطقی تازه.
پهنای فیزیکیphysical_widthصحیح = 0پهنای تازه بر حسب نقطه‌ی دستگاه.
بلندی فیزیکیphysical_heightصحیح = 0بلندی تازه بر حسب نقطه‌ی دستگاه.
مقیاسscaleاعشار۶۴ = 0ضریب مقیاس.
دکمهbuttonدکمه‌موشیدکمه‌ی موشی.
شمار کلیکclicksصحیح = 0۱ برای تک‌کلیک، ۲ برای دوکلیک و همین‌طور.
کلیدهای تغییرmodifiersصحیح = 0بیت‌های کلیدهای تغییر که هنگام رویداد نگه داشته شده بودند.
جابجایی افقیdelta_xاعشار۶۴ = 0پیمایش افقی؛ مثبت به راست.
جابجایی عمودیdelta_yاعشار۶۴ = 0پیمایش عمودی؛ مثبت به پایین، مانند رویداد wheel در وب.
واحد جابجاییdelta_modeواحدچرخشاین‌که جابجایی‌ها نقطه‌اند یا خط.
کلیدkeyکلیدهاکلید با جای آن.
کد فیزیکیcodeصحیح = 0کد خام کلید در سیستم (کد کلید X11، کد پویش ویندوز، کد کلید مک).
تکراریrepeatedمنطقی = نادرستوقتی کلید به خاطر نگه داشتن تکرار می‌شود درست است.
متنtextرشته = ""متن تایپ‌شده یا ساخته‌شده در UTF-8. تا انتظار رویداد یا سرکشی رویداد بعدی معتبر است؛ برای نگه داشتن، رونوشت بگیرید.
جای نشانگرcursorصحیح = 0جای نشانگر درون متن در حال ساخت، بر حسب بایت.
طرحschemeطرح‌رنگطرح رنگ تازه.
زمان سنجtimerصحیح = 0شماره‌ی زمان‌سنجی که زنگ زد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

پنجره Window

ساختار پنجره
دستگیره‌ی یک پنجره‌ی باز. رونوشت‌ها به همان پنجره اشاره می‌کنند.
نامانگلیسیگونهتوضیح
شناسهidصحیح = -1شماره‌ی پنجره؛ رویدادها آن را در شماره پنجره دارند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

باز است IsOpen

تابع باز است(): منطقی
آیا پنجره باز است. اگر باز کردن نشد نادرست است؛ آخرین خطا را ببینید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

بی سر است IsHeadless

تابع بی سر است(): منطقی
آیا پنجره‌ی درون حافظه است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

متمرکز است IsFocused

تابع متمرکز است(): منطقی
آیا تمرکز صفحه‌کلید را دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

تنظیم عنوان SetTitle

تابع تنظیم عنوان(title: رشته)
عنوان را عوض می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

عنوان پنجره Title

تابع عنوان پنجره(): رشته
عنوان کنونی. تا تنظیم عنوان بعدی معتبر است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

تنظیم اندازه SetSize

تابع تنظیم اندازه(width: اعشار۶۴، height: اعشار۶۴)
اندازه‌ی تازه‌ای بر حسب نقطه‌ی منطقی می‌خواهد که در مرزها گنجانده می‌شود؛ پس از آن تغییر اندازه می‌آید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

اندازه Size

تابع اندازه(): اندازه‌پنجره
اندازه‌ی کنونی بر حسب نقطه‌ی منطقی و فیزیکی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

ضریب مقیاس ScaleFactor

تابع ضریب مقیاس(): اعشار۶۴
شمار نقطه‌های دستگاه در هر نقطه‌ی منطقی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

ارائه Present

تابع ارائه(pixels: تهی*، width: صحیح، height: صحیح، stride: صحیح، damage: وکتور<مستطیل>): منطقی
یک بافر BGRA پیش‌ضرب‌شده را نشان می‌دهد و تنها مستطیل‌های تغییرکرده را رونویسی می‌کند؛ وکتور خالی یعنی همه‌ی بافر. برای بافر نادرست، نادرست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Present.salam

ارائه کامل PresentAll

تابع ارائه کامل(pixels: تهی*، width: صحیح، height: صحیح، stride: صحیح): منطقی
همه‌ی بافر را نشان می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Present.salam

درخواست بازکشی دوباره RequestRedraw

تابع درخواست بازکشی دوباره()
یک رویداد درخواست بازکشی می‌خواهد؛ درخواست‌های پیاپی یکی می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

تنظیم نشانگر SetCursor

تابع تنظیم نشانگر(cursor: شکل‌نشانگر)
شکل اشاره‌گر روی پنجره را تعیین می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

تنظیم جای نویسه ساز SetImeRect

تابع تنظیم جای نویسه ساز(x: اعشار۶۴، y: اعشار۶۴، width: اعشار۶۴، height: اعشار۶۴)
جای نشانگر متن را بر حسب نقطه‌ی منطقی به نویسه‌ساز می‌گوید تا پنجره‌اش دنبال متن بیاید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

تنظیم کمترین اندازه SetMinSize

تابع تنظیم کمترین اندازه(width: اعشار۶۴، height: اعشار۶۴)
کمترین اندازه را تعیین می‌کند؛ ۰ مرز را برمی‌دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

تنظیم بیشترین اندازه SetMaxSize

تابع تنظیم بیشترین اندازه(width: اعشار۶۴، height: اعشار۶۴)
بیشترین اندازه را تعیین می‌کند؛ ۰ مرز را برمی‌دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

کمینه کردن Minimize

تابع کمینه کردن()
پنجره را کمینه می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

بیشینه کردن Maximize

تابع بیشینه کردن()
پنجره را بیشینه می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

بازگرداندن Restore

تابع بازگرداندن()
آن را از کمینه یا بیشینه بازمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

تنظیم تمام صفحه SetFullscreen

تابع تنظیم تمام صفحه(enabled: منطقی)
به تمام صفحه می‌رود یا از آن بیرون می‌آید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

تمام صفحه است IsFullscreen

تابع تمام صفحه است(): منطقی
آیا تمام صفحه خواسته شده است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

متمرکز کردن Focus

تابع متمرکز کردن()
پنجره را با تمرکز صفحه‌کلید به جلو می‌آورد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

بستن Close

تابع بستن()
پنجره را می‌بندد و بافرش را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

تنظیم نماد SetIcon

تابع تنظیم نماد(pixels: تهی*، width: صحیح، height: صحیح، stride: صحیح): منطقی
نماد پنجره (در مک نماد برنامه) را از یک بافر نقطه‌ها تعیین می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Present.salam

نقطه در PixelAt

تابع نقطه در(x: صحیح، y: صحیح): طبیعی۳۲
یک نقطه از آخرین قاب ارائه‌شده را به شکل 0xAARRGGBB می‌خواند، یا بیرون از آن ۰.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Present.salam

نقطه نمایش داده شده ShownPixel

تابع نقطه نمایش داده شده(x: صحیح، y: صحیح): طبیعی۳۲
نقطه را تا جایی که بشود از سیستم بازمی‌خواند: X11 و ویندوز از نمایشگر، مک و پنجره‌ی بی‌سر از قاب. آلفا همیشه FF است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Present.salam

شمار ارائه PresentCount

تابع شمار ارائه(): صحیح
شمار قاب‌های ارائه‌شده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Present.salam

آخرین ناحیه تغییر LastDamage

تابع آخرین ناحیه تغییر(): مستطیل
مستطیل دربرگیرنده‌ی ناحیه‌هایی که آخرین ارائه رونویسی کرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Present.salam

شمار آخرین ناحیه ها LastDamageCount

تابع شمار آخرین ناحیه ها(): صحیح
شمار مستطیل‌هایی که آخرین ارائه رونویسی کرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Present.salam

نشانگر کنونی CurrentCursor

تابع نشانگر کنونی(): شکل‌نشانگر
آخرین شکل اشاره‌گر تعیین‌شده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

جای نویسه ساز ImeRect

تابع جای نویسه ساز(): مستطیل
آخرین ناحیه‌ی نویسه‌ساز تعیین‌شده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

دستگیره Handle

تابع دستگیره(): تهی*
دستگیره‌ی بومی: شناسه‌ی پنجره‌ی X11، یک HWND یا یک NSWindow؛ برای پنجره‌ی بی‌سر پوچ.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

پایاها و متغیرها

تغییرشیفت mod_shift

پایا تغییرشیفت: صحیح۳۲ = 1
بیتی در کلیدهای تغییر که هنگام نگه داشتن Shift روشن است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

تغییرکنترل mod_control

پایا تغییرکنترل: صحیح۳۲ = 2
بیتی که هنگام نگه داشتن Control روشن است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

تغییرآلت mod_alt

پایا تغییرآلت: صحیح۳۲ = 4
بیتی که هنگام نگه داشتن Alt (در مک Option) روشن است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

تغییرسوپر mod_super

پایا تغییرسوپر: صحیح۳۲ = 8
بیتی که هنگام نگه داشتن کلید ویندوز یا Command روشن است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

تابع‌ها

باز کردن Open

تابع باز کردن(options: گزینه‌پنجره): پنجره
یک پنجره باز می‌کند. باز است را بسنجید: بدون سیستم پنجره، پنجره‌ای بسته برمی‌گردد و آخرین خطا دلیلش را می‌گوید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Open.salam

آخرین خطا LastError

تابع آخرین خطا(): رشته
دلیل شکست آخرین فراخوانی بومی، یا خالی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-App.salam

انتظار رویداد Wait

تابع انتظار رویداد(timeout_ms: صحیح): رویداد
تا timeout_ms میلی‌ثانیه (‎-۱ برای بی‌پایان) منتظر رویداد بعدی می‌ماند و زمان‌سنج‌های رسیده را به زنگ درمی‌آورد. با پایان زمان، رویدادی از نوع هیچ رویداد برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

سرکشی رویداد Poll

تابع سرکشی رویداد(): رویداد
رویداد بعدی را بی‌انتظار برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

تزریق رویداد Inject

تابع تزریق رویداد(event: رویداد)
رویدادی را چنان‌که سیستم فرستاده باشد به صف می‌افزاید و اثرش (اندازه، تمرکز، طرح) را اعمال می‌کند. برای آزمون.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Event.salam

تنظیم زمان سنج SetTimer

تابع تنظیم زمان سنج(ms: صحیح، repeating: منطقی): صحیح
زمان‌سنجی می‌سازد که هر ms میلی‌ثانیه یا یک بار زنگ می‌زند و شماره‌اش را برمی‌گرداند.
gui-window-Timer.salam
// زبان: فارسی
واردسازی رابط گرافیکی.پنجره ها

تابع ریشه:
    پنجره ها.تنظیم ساعت دستی(درست)
    tick := پنجره ها.تنظیم زمان سنج(100، درست)
    once := پنجره ها.تنظیم زمان سنج(250، نادرست)
    تکرار 4:
        e := پنجره ها.انتظار رویداد(-1)
        سرچاپ e.نوع برابر پنجره ها.نوع‌رویداد.زنگ زمان سنج، e.زمان سنج برابر tick ? "tick" : "once"، پنجره ها.ساعت()
    پایان
    پنجره ها.پاک کردن زمان سنج(tick)
    پنجره ها.جلو بردن ساعت(1000)
    سرچاپ پنجره ها.ساعت()، پنجره ها.انتظار رویداد(10).نوع برابر پنجره ها.نوع‌رویداد.هیچ رویداد
    پنجره ها.بیدار کردن()
    سرچاپ پنجره ها.انتظار رویداد(-1).نوع برابر پنجره ها.نوع‌رویداد.بیدارباش، once بزرگتر tick
پایان
خروجیtrue tick 100 true tick 200 true once 250 true tick 300 1300 true true true

پاک کردن زمان سنج ClearTimer

تابع پاک کردن زمان سنج(id: صحیح)
زمان‌سنج را می‌ایستاند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Timer.salam

بیدار کردن Wake

تابع بیدار کردن()
انتظار رویداد را از هر رشته‌ای با رویداد بیدارباش می‌شکند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Timer.salam

تنظیم ساعت دستی SetManualClock

تابع تنظیم ساعت دستی(enabled: منطقی)
به ساعت آزمونی می‌رود که از ۰ آغاز می‌شود و تنها با پرش انتظار رویداد به زمان‌سنج بعدی یا با جلو بردن ساعت جلو می‌رود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Timer.salam

ساعت Clock

تابع ساعت(): صحیح۶۴
ساعت رویدادها بر حسب میلی‌ثانیه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Timer.salam

جلو بردن ساعت Advance

تابع جلو بردن ساعت(ms: صحیح)
ساعت آزمون را جلو می‌برد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-Timer.salam

متن کلیپ بورد ClipboardText

تابع متن کلیپ بورد(): رشته
متن کلیپ‌بورد. فراخواننده آن را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-App.salam

تنظیم متن کلیپ بورد SetClipboardText

تابع تنظیم متن کلیپ بورد(text: رشته): منطقی
متن را در کلیپ‌بورد می‌گذارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-App.salam

طرح رنگ کنونی CurrentColorScheme

تابع طرح رنگ کنونی(): طرح‌رنگ
این‌که سیستم در نمای روشن است یا تیره.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-App.salam

شمار پنجره های باز OpenWindows

تابع شمار پنجره های باز(): صحیح
شمار پنجره‌های باز.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: gui-window-App.salam