# 📱 قالب اپلیکیشن فروشگاهی — Basic4Android
یک رابط کاربری **کامل و حرفهای** برای اپ فروشگاهی، آماده برای وصل کردن به دادهٔ واقعی.
همهچیز در کد ساخته میشود؛ **هیچ فایل لایوت (Designer) لازم نیست.**
---
## 🎨 چه چیزی داخل قالب هست؟
- 🟣 **سربرگ واکنشگرا** — روی گوشی کوچک، نام فروشگاه خودکار کنار میرود تا کادر جستوجو تنگ نشود
- 🖼️ **اسلایدر تبلیغاتی** — سه اسلاید با تغییر خودکار هر ۴ ثانیه + نقطههای نشانگر
- 🗂️ **نوار دستهبندی افقی** — چیپهای قابل اسکرول؛ انتخابشده برجسته میشود
- 🛍️ **شبکه محصولات دوستونه** — کارت با کادر تصویر، برچسب درصد تخفیف، نام، امتیاز، قیمت و دکمهٔ افزودن
- 🛒 **سبد خرید شمارشی** — نشانگر قرمز روی آیکن سبد با ارقام فارسی
- 📊 **نوار پایین** — خانه / دستهها / سبد / پروفایل
- 🌗 **دو تم (تاریک و روشن)** — با یک تابع عوض میشود؛ رنگها از پیش از نظر کنتراست تست شدهاند
- 🔍 **کادر جستوجو** با رویداد EnterPressed
- 🇮🇷 **کمککارهای فارسی** — `۱,۲۵۰,۰۰۰ تومان` با ارقام فارسی و جداکنندهٔ هزارگان
---
## 🧪 چرا این قالب «بیدردسر» است؟
**۱۵۲ تست خودکار، همه سبز** — این قالب با تست ساخته شده، نه با حدس:
| سنجه | نتیجه |
|---|---|
| نسبت کنتراست متن روی کارت | **۱۴.۳:۱** (تاریک) و **۱۷:۱** (روشن) — استاندارد ۴.۵ |
| چیدمان در سه اندازهٔ گوشی (۳۲۰/۳۹۲/۴۳۰ dip) | بدون همپوشانی |
| همخوانی کد با مدل چیدمان | خودکار بررسی میشود |
| خطاهای رایج B4A | صفر |
> **تست چیدمان یعنی چه؟** یعنی قبل از اینکه شما در B4A خطا ببینید، ریاضیات همهٔ
> مختصات (چپ، بالا، عرض، ارتفاع) در سه اندازهٔ صفحه محاسبه و بررسی شده که هیچ
> دو عنصری روی هم نیفتد و چیزی از صفحه بیرون نزند.
---
## 🖼️ پیشنمایش
دو تصویر تمامصفحه (`preview/preview-dark.png` و `preview-light.png`) داخل بسته هست،
بههمراه اسکریپت پایتونی که همان پیشنمایش را میسازد. یعنی اگر رنگی را عوض کردید،
میتوانید قبل از اجرای B4A نتیجه را ببینید.
---
## 🚀 نصب در ۳ مرحله
1. پروژهٔ جدید در B4A (Package: `ir.yourname.shop`)
2. `Project → Add Existing Modules`:
- `Modules/Theme.bas`
- `Main.bas`
3. `F5` — اپ بالا میآید.
> اگر پروژه از قبل `Main.bas` دارد، نام فایل را به `ShopUI.bas` تغییر دهید.
---
## 🎛️ شخصیسازی سریع
**رنگها** — همه در `Modules/Theme.bas`:
```
Public Sub ApplyDarkTheme
ColBg = Colors.RGB(15, 18, 30) ' پسزمینه
ColPrimary = Colors.RGB(108, 92, 231) ' رنگ برند
ColAccent = Colors.RGB(120, 220, 180) ' رنگ قیمت
End Sub
```
**محصولات** — در `Main.bas` داخل `BuildProductGrid`:
```
Dim names() As String = Array As String("محصول من", ...)
Dim prices() As Long = Array As Long(1250000, ...)
Dim sales() As Long = Array As Long(890000, ...) ' صفر = بدون تخفیف
```
**دستهها** — یک آرایه؛ عرض هر چیپ خودکار از طول متن حساب میشود.
---
## 📚 راهنمای کامل فارسی
`Docs/راهنمای-قالب.md` شامل:
- معماری صفحه به صفحه
- جدول کامل رنگها و کاربردشان
- **افزودن صفحهٔ جزئیات محصول** (کد آماده)
- **اتصال به API واقعی** با HttpJob و JSON
- چکلیست انتشار در بازار
- جدول عیبیابی
---
## 💡 نکات فنی که در بازار پیدا نمیکنید
این قالب مسائل واقعی B4A را حل کرده:
1. **چند دکمه، یک تابع:** در B4A یک `Sub` نمیتواند دو رویداد بگیرد، ولی چند نما
میتوانند یک نام رویداد داشته باشند — با `Sender` و `Tag` تفکیک شدهاند.
2. **ارتفاع اسکرولویو:** اگر نوار پایین روی اسکرولویو بیفتد، آخرین ردیف محصول پنهان
میشود؛ اینجا ارتفاع درست تنظیم شده.
3. **کادر جستوجو در تم روشن:** اگر همرنگ سربرگ باشد دیده نمیشود؛ رنگ اختصاصی
`ColField` برایش تعریف شده.
4. **تبدیل ارقام:** تابع `FaDigits` رشتهای است و `ToFaDigits` عددی — قاطی کردنشان
خطای زمان اجرا میدهد.
---
## 🎁 ایدهٔ استفاده
- راهاندازی فروشگاه آنلاین کوچک (با API ساده)
- نمایش کاتالوگ محصولات یک کسبوکار (بدون فروش آنلاین)
- قالب پایه برای هر اپ لیستی (آگهی، رستوران، ویدیو) — ساختار آماده است
---
## 📄 مجوز
انتشار اپ ساختهشده با این قالب با نام خودتان **آزاد است**.
فروش مجدد قالب یا انتشار آن بهعنوان محصول مستقل مجاز نیست.
---
💬 سؤالی دارید؟ از بخش پشتیبانی فروشگاه پیام بدهید.
| دستهبندی | قالب اپلیکیشن |
| تاریخ انتشار | ۲۲ شهریور ۱۴۰۵ - ۰۱:۵۴ |
| تعداد بازدید | ۴ |
| تعداد فروش | ۰ |
| فرمت تحویل | فایل دانلودی (بعد از پرداخت آنی فعال میشود) |
| پشتیبانی | تیکت پشتیبانی در پنل کاربری |
ویژگیهای کلیدی
- رابط کاربری کامل و آمادهٔ اپ فروشگاهی — تمام کد، بدون فایل لایوت
- سربرگ واکنشگرا: روی گوشی کوچک، نام فروشگاه خودکار حذف میشود
- اسلایدر تبلیغاتی با تغییر خودکار و نقطههای نشانگر
- نوار دستهبندی افقی با چیپهای قابل اسکرول
- شبکه محصولات دوستونه با کارتهای کامل
- برچسب درصد تخفیف روی کارت محصول
- سبد خرید با نشانگر تعداد و ارقام فارسی
- نوار پایین: خانه / دستهها / سبد / پروفایل
- دو تم تاریک و روشن با یک تابع
- رنگها از نظر کنتراست تست شده: ۱۴.۳:۱ (تاریک) و ۱۷:۱ (روشن)
- ۱۵۲ تست خودکار چیدمان و کنتراست در سه اندازهٔ گوشی
- دو تصویر پیشنمایش تمامصفحه + اسکریپت رندر پیشنمایش
- راهنمای فارسی کامل: افزودن صفحه، اتصال به API، انتشار در بازار
- کمککارهای فارسی: قیمت تومانی با جداکنندهٔ هزارگان
- الگوی «چند دکمه، یک تابع» با Sender و Tag
هنوز نظری ثبت نشده است. اولین نفر باشید!
برای ثبت نظر وارد شوید. (ثبت نظر پس از خرید فعال میشود)
' ═══ نمونهای از سورس (بخشی از قالب) ═══
' رنگها همه در یک ماژول (Theme.bas) — با یک تابع عوض میشوند
Public Sub ApplyDarkTheme
ColBg = Colors.RGB(15, 18, 30)
ColHeader = Colors.RGB(21, 25, 40)
ColCard = Colors.RGB(28, 33, 50)
ColText = Colors.RGB(238, 242, 255)
ColPrimary = Colors.RGB(108, 92, 231)
ColAccent = Colors.RGB(120, 220, 180)
End Sub
' ⚠ دام واقعی B4A: چند دکمه با یک نام رویداد ساخته میشوند
' (در B4A یک Sub نمیتواند دو رویداد بگیرد، ولی چند نما یک نام رویداد OK است)
Dim btnW As Int = 96dip
Dim logoW As Int = 110dip
Dim searchW As Int = W - btnW - logoW - (Theme.PAD * 2)
If searchW < 110dip Then
logoW = 0 ' صفحهٔ کوچک → نام فروشگاه قربانی
searchW = W - btnW - (Theme.PAD * 2)
End If
' قیمت با ارقام فارسی و جداکنندهٔ هزارگان
Public Sub FaPrice(price As Long) As String
Dim s As String = "" & price
Dim out As StringBuilder
out.Initialize
Dim cnt As Int = 0
For i = s.Length - 1 To 0 Step -1
If cnt > 0 And (cnt Mod 3) = 0 Then out.Insert(0, ",")
out.Insert(0, s.SubString2(i, i + 1))
cnt = cnt + 1
Next
Return FaDigits(out.ToString) & " تومان"
End Sub
⚠ نسخهٔ کامل شامل سربرگ، اسلایدر، شبکه محصولات، نوار پایین و راهنمای فارسی است.