Grafik arayüzlü program. Qt kullanarak bir grafik arayüz oluşturma. C# kodundan arayüz oluşturma

1.1. Merhaba Qt!

En basit Qt programının metninin altına gelin:

1 #dahil 2 #dahil 3 int main(int argc, char *argv) 4 ( 5 QApplication app(argc, argv); 6 QLabel *label = new QLabel("Merhaba, Qt!", 0); 7 app.setMainWidget(label); 8 etiket ->show(); 9 return app.exec(); 10 ) Burada, 1. ve 2. satırlarda QApplication ve QLabel sınıfları dahil edilmiştir.

5. satırda, programın kaynakları tarafından işlenen QApplication sınıfının bir örneği oluşturulur. QApplication oluşturucusu argc ve argv argümanları iletilir, Qt kabukları komut satırı argümanlarını işleyebilir.

Satır 6, "Merhaba, Qt!" görüntüleyen bir QLabel görsel bileşeni oluşturur. Qt terminolojisinde grafiksel bir arayüze sahip olacak tüm görsel bileşenlere denir. widget'lar(Widget'lar). Düğmeler, menüler, kayan girdaplar ve çeşitli çerçeveler - bunların tümü widget'lardır. Bazı widget'lar kendi widget'larında kullanılabilir, örneğin müstehcen programlar - QMenuBar, QToolBar, QStatusBar ve diğerleri tarafından kullanılabilen en belirgin widget. null) bu widget'ın kendisine ait bir "cetvel" olmadığını söyleyen bir gösterge. başka bir widget ile oturum açmayın.

7. satırda, programın "head" widget'ı atanır. Koristuvach, programın "head" widget'ını kapatırsa (örneğin, pencere başlığında "X" düğmesine basarım), program işini tamamlar. Program ana widget'ı tanımıyorsa, pencere kapatıldıktan sonra arka plan modunu beklemeye devam edecektir.

8. satırda işaret görünür. Widget'lar her zaman görünmez yapılır, böylece programlayıcı, koku görünür hale gelmeden önce ekran parametrelerini ayarlama yeteneğinden mahrum kalır.

9. satırda, Qt kitaplığı bakımının aktarımı devre dışı bırakılır. Bu andan itibaren program, herhangi bir şey yapmazsanız, sadece kadranı kontrol ederseniz, örneğin tuşa veya fare düğmesine basarak temizleme moduna geçecektir.

Be-yaka diya koristuvacha yumurtlama podyum(başka bir deyişle - "gelişme"), bir program söz konusu olduğunda, bir veya daha fazla işlevi tıklatabilirsiniz. Bu anlamda, grafik arayüzlü eklentiler özel programlarda kökten değiştirilir, verinin toplu işlenmesiyle, girdiyi bir coristuvach olarak kabul etmiş gibi, bağımsız olarak yogayı işler, sonuçları görür ve çalışmalarını daha fazla katılım olmadan tamamlarlar. insanlar.

Bebek 1.1. Windows XP için Vikno programları


Şimdi programımızın robotunu yeniden yazma zamanı. Her şeyden önce - Qt 3.2'nin (veya yeni sürümün) kurulu olması ve bin dizinine giden PATH yolunun değiştirilmesi gerekir. (Windows için, Qt kitaplığının yüklenmesi sırasında değiştirilen PATH ayarı otomatik olarak devre dışı bırakılır)

Hello.cpp adlı dosyadaki programın metnini hello dizininden kopyalayın.

Farklı bir dizine gidin ve şu komutu verin:

Qmake -project platformdan bağımsız bir proje dosyası (hello.pro) oluşturmak ve ardından aşağıdaki komutu vermek için: qmake merhaba.pro Bu komut, proje dosyasına dayalı bir Makefile oluşturacaktır. Programı derlemek için make komutunu verin ve ardından її yazarak çalıştırın. merhaba(Windows için) veya ./merhaba(Unix için) veya merhaba.app'yi aç(Mac OS X). Windows üzerinde çalışıyorsanız ve Microsoft Visual C++ kullanıyorsanız, make komutunu değiştirmeli ve nmake komutunu vermelisiniz. Alternatif olarak, qmake -tp vc merhaba.pro komutunu çalıştırarak merhaba.pro dosyasından bir Visual Studio projesi oluşturabilir ve ardından programı Visual Studio'da derleyebilirsiniz.

Bebek 1.2. Biçimlendirilmiş metinle etiketleyin.


Ve şimdi troch'u parçalayalım. Metne HTML stilinde biçimlendirme ekleyerek etiketin görünümünü değiştirdik. Kimin için, satırı değiştirin

QLabel *label = new QLabel("Merhaba, Qt!", 0); QLabel'de *etiket = yeni QLabel("

merhaba " "Qt!

", 0); ve programı yeniden seçin.


1.2. Sinyallerin çalışması.

Saldırgan popo gösteriliyor - programın tepkisinin koristuvach'a nasıl organize edileceği. Düğmeye basmak için Tsya programı, yak üzerine basıldığında program kapanır. Dış metin zaten ön uca benzer, çünkü artık ana widget olarak QLabel, QPushButton'un ve saldırının bir gerçeği olarak hizmet eden ek kodun yerini alıyor.

Bebek 1.3. Programdan çıkın.


1 #dahil 2 #dahil 3 int main(int argc, char *argv) 4 ( 5 QApplication app(argc, argv); 6 QPushButton *button = new QPushButton("Çıkış", 0); 7 QObject::connect(button, SIGNAL(clicked()) ), 8 &app, SLOT(quit())), 9 app.setMainWidget(button);10 button->show(); sinyaller, yogo'ya koristuvach'ın yaptıklarını, tapu olup olmadığını veya kampını değiştirecek olanları anlatmak. Örneğin, QPushButton sınıfının bir örneği, düğmeye basıldığında programa bir clicked() sinyali gönderir. Sinyal bir işlev işleyiciye "bağlanabilir" (bu tür Qt işleyicileri yuvalar). Bu şekilde, eğer widget sinyali aşarsa, slot otomatik olarak çağrılır. Uygulamalar, bir düğme gibi clicked() sinyalini QApplication sınıfının bir örneği olan Quit() yuvasına bağladı. SIGNAL() ve SLOT() wikileri makro sinyallerdir, bir sonraki bölümde bunları rapor edeceğiz.

Şimdi programı ele alalım. Quit dizinini zaten oluşturduğunuzu ve Quit.cpp dosyasını dağıttığınızı tahmin ediyorum. bir komut ver qmake bir proje dosyası oluşturmak ve ardından aniden - bir Makefile oluşturmak için:

Qmake -project qmake Quit.pro Şimdi komutla programdan çıkın Yapmak ve yogaya başlayın. İster "Çıkış" düğmesine basın, ister klavyede "Proble" tuşuna basın, program işini bitirir.

Saldıran popoda, iki widget'ı senkronize etmek için sinyalleri ve yuvaları kazanmanın nasıl mümkün olduğu gösterilir. Tsya programı proponuє koristuvachevі zaprovaditi svіy vіk. Lichnik'i yönetmek için düğmelerin yardımıyla veya şahin yardımı için yapabilirsiniz.

Bebek 1.4. Yaş programı.


Üç widget ekleyin: QSpinBox, QSlider ve QHBox (yatay yerleşim alanı). Programın ana widget'ı QHBox'tır. QHBox'ın ortasına yerleştirilmiş QSpinBox ve QSlider bileşenleri ve є Uysal , Geç itibariyle.

Bebek 1.5. Yaş için Widget'lar.


1 #dahil 2 #dahil 3 #dahil 4 #dahil 5 int main(int argc, char *argv) 6 ( 7 QApplication app(argc, argv); 8 QHBox *hbox = new QHBox(0); 9 hbox->setCaption("Yaşınızı Girin"); 10 hbox-> setMargin(6); 11 hbox->setSpacing(6); 12 QSpinBox *spinBox=yeni QSpinBox(hbox); 13 QSlider *kaydırıcı=yeni ); 15 kaydırıcı->setRange(0, 130); 16 QObject::connect(spinBox, SIGNAL(valueChanged(int)), 17 kaydırıcı, SLOT(setValue(int))); (valueChanged(int)), 19 spinBox, SLOT(setValue(int))), 20 spinBox->setValue(35); 21 app.setMainWidget(hbox); 22 hbox->göster(); 23 return app.exec( );24) 8'den 11'e kadar olan satırlar QHBox'ı oluşturur ve kapatır. Pencere başlığına metin girmek için setCaption() öğesini çağırın. Ardından, uygun widget'lar arasındaki boş alanı (6 piksel) geri yükleyeceğiz.

12 ve 13. satırlarda QSpinBox ve QSlider oluşturulur ve QHBox bir Vlasnik olarak atanır.

QSpinBox ve QSlider widget'larının ne konumunu ne de genişletmesini açıkça belirlemeyenlere şaşırmadım, pis koku QHBox'ın ortasına düzgünce yayıldı. tsgogo i randevuları için Vlasne QHBox. Vіn vykonuє, uygun widget'ları otomatik olarak yerleştirir, onlara yerleşimin ve konumun koordinatlarını atayarak, vіd їkhnіh bu vlaštuvan olabilir. Qt, QHBox'a benzer birçok sınıfa sahiptir ve bu, görsel bileşenlerin konumunu manuel olarak ayarlama ve yeniden boyutlandırma ile rutin işlerde bize yardımcı olur.

14 ve 15. sıralarda, lichnik ve körüğün izin verilen değişimleri kurulur. (Kısa saçlı adamımızın 130 yılı geride bırakmasının pek olası olmadığını güvenle kabul edebiliriz.) 16'dan 19'a kadar olan satırlardaki iki connect() wiki, ismin bayrağını senkronize ediyor, öyleyse neden stink her zaman aynı anlamı alsın. Parçacıklardan birinin değeri değiştiğinde, diğer parçacığın setValue(int) yuvasıyla eşleşmesi için bir valueChanged(int) sinyali gönderir.

20. satırda, lichnik'in birincil değeri (35) kurulur. Geçildiğinde, değişken, giriş argümanının değerine bağlı olarak, 35'e eşit olan valueChanged(int) sinyalini geçersiz kılar. Bu sayı, QSlider parçacığının setValue(int) yuvasına iletilir, bu sayı, değişkenin değerini ayarlar. widget 35'e eşittir. valueChanged(int) sinyali zaten gönderilmişse Bazı değerleri önemli ölçüde değişmiştir, setValue(int) yuvasını bu şekilde QSpinBox widget'ına çağırmak. İlk kez lichilnik bir sinyal göndermedi, anlamının parçalarını ve 35'i de gönderdi. Bu şekilde, özyinelemeli özyineleme kaydedilir. Malyunok 1.6 durumu göstermektedir.

Bebek 1.6. Bir anlamın değişmesi, diğerinin değişmesini gerektirir.


22 QHBox'luk bir satırda, görünür olmaya çalışın (aynı zamanda widget'ların yardımıyla).

Qt arayüzünü biçimlendirme yaklaşımı, anlaşılması daha da basit ve son derece esnektir. Vahşi bir şekilde, programcı gerekli widget'ları seçer, bunları düzen alanlarının (düzenlerin) ortasına yerleştirerek, sanki kendi yerinden, widget'ların yerleşiminin bağlantılarını ve widget'ların gücünü üstlenir. Son aşamada, sanki konuşmacının arayüzünün davranışını seslendiriyormuş gibi, sinyaller ve yuvalar mekanizması aracılığıyla widget'ların karşılıklı bağlantıları kurulur.

1.3. Gelişmiş sistemden robot.

Dovidkov sistemi Qt - belki de herhangi bir perakendecinin en önemli aracı. Vaughn, bu kitaplığın tüm sınıf işlevlerini açıklar. (Qt 3.2 belgeleri, 400'den fazla sınıf ve 6.000'den fazla işlevin tanımlarını içerir.) Bu kitap, birçok Qt sınıfı ve işlevine sahiptir, ancak ayrıntılı olmaktan uzaktır. Bu nedenle, gelişmiş Qt sistemine bağımsız olarak aşina olmanız gerekir.

Widget stilleri
Windows XP'de ekran görüntüleri, yakі mi bachili, buli otrimani. Ancak, widget'ların mevcut görünümü, programın başlatıldığı platforma bağlı olarak değişir. Öte yandan, Qt herhangi bir destekleyici platformun eski görünümünü taklit edebilir.



Bu yazıda, C++'ımın en yaygın biçimlerinden en basit eklemelerin oluşturulmasının bir açıklaması var. Açıkça belirtmek isterim: "form" C ++ eklentilerinin geliştirilmesi Microsoft Visual Studio arasında tanıtılacak (ana rakip Borland Software tarafından görülecektir). Warto, Visual Studio'nun formlarla eklemeler oluşturmanın iki yolu olduğu anlamına gelir, karar yeni bir projenin oluşturulması sırasında verilir.

Bunlardan ilki, bir grafik arabirim uygulayan ve Microsoft.NET Framework ile uyumlu olan Windows Forms'tur. Bu kılavuz, Microsoft Windows'un arabirim öğelerine erişmenize ve çekirdek kodunda Win32 API sarmalayıcısı oluşturmanıza olanak tanır. Kişinin düşüncelerini daha mantıklı bir biçimde ifade etmesi için Danimarkalı pidkhid, konsol sonrası eke daha da benzer, ancak biraz daha kıvrımlıdır. vikorist formu.

Microsoft Foundation Classes (MFC), kitaplıkları temel almanın bir başka yolu da bir program çerçevesi oluşturma görevini üstlenmektir. Her şeyden önce, MFC kutudan çıkarılmış vicorist modeli MVC (Model-View-Cont silindiri). Danimarka ilkinden daha katlanabilir, ancak yenisinin üzerine spiral çizerek, örneğin bir metin düzenleyici gibi ek eklentiler için bir çerçeve oluşturabilir veya Şerit bileşenini çevirebilir ve MS Office 2010'da gördüğünüz gibi bir menü oluşturabilirsiniz.

MS Visual Studio'da program oluşturma

Yeni bir program oluşturalım: Dosya->Yeni->Proje. İlk bakışta Windows Forms Uygulamasını bulup seçmeli, bir isim (app1) verip yeni projeye isim vermeli ve “Tamam” butonuna basarak oluşturmanızı onaylamalısınız.

Her şeyden önce, aracı programlama olmadan rozpochat, sonraki yolun ne olduğunu anlamak. Podiya tse diya, şarkı söyleyen zihinler için scho vіdbuvaєtsya. Kullanabileceğiniz en basit (ve en geniş ve) Load, Click ... hadi bunlardan bazılarına göz atalım:

  • Etkinleştirildi - öğe etkinleştirme saatini belirleyen podia.
  • Tıklayın - öğeye tek bir tıklama için suçlar.
  • DoubleClick - bir öğeye tıklayın.
  • HelpRequested - bir tuşa basarken yardım .
  • Boya - Eleman yeniden boyanmışsa Vinicate.
  • MouseLeave - imleç öğe arasında bırakılırsa, podіya spratsovuє.

Güç elemanının bu tipte olması gerektiğini unutmayın. Nesne için mevcut tüm formları incelemek için onu görmeli ve yetki penceresindeki blister simgesini seçmelisiniz. Aşağıda Form1 öğesi için kısmi bir alt bölüm bulunmaktadır. Yük alt yordamı için bachiti yapmak mümkün olduğundan Form1_Load işlevi seçilir, bu nedenle form yakalandığında bu işleve yerleştirilen koda tıklanır.

Form1.h dosyasını açın, aşağıdaki kod olacaktır:

Özel: System::Void Form1_Load(System::Object^ gönderen, System::EventArgs^ e)( )

Bu, form yakalandığında kullanıldığı için Form1_Load işlevinin kendisidir. Forma bir TextBox bileşeni ekleyerek işleri değiştirelim.

Kimin için, kaynak formunu açın ve yogaya bakın. Ardından, Araç Kutusu panelini seçin ve TextBox bileşenini forma sürükleyin. Form1_Load işlevini şu şekilde değiştirin:

Özel: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) ( textBox1->Text = "Merhaba, Dünya!"; //textBox1 kutuya eklediğiniz metnin adıdır)

Projeyi çalıştırın, sonuçlar aşağıdaki bildirimi gösterebilir:

Şimdilik her şey şimdilik bu kadar, sonraki derslerde devam edin.

Son güncelleme: 05/26/2019

Xamarin.Forms görsel arayüzü üç taraftan oluşmaktadır. Sayfa, Sayfa sınıfının bir nesnesidir, tüm ekran alanını kaplar. Tobto mobil ekinde ekranda olanlar aynı tarafta. Programın bir veya birkaç yüzü olabilir.

Sayfa genellikle, diğer düzen öğelerinin yanı sıra düğmeler ve metin alanları gibi standart görsel öğelerin kendi aralıklarına yerleştirildiği kap düzenlerinden birini kabul eder.

HelloApp projesi olan birçok konunun kreasyonlarını düşünün (aksi takdirde yeni bir tane yaratıyoruz). Kilidin arkasında, tüm arabirim, App.xaml.cs dosyasında bulunan ve akış programını temsil eden App sınıfında oluşturulur:

Yogo kilit kodu:

sistemi kullanarak; Xamarin.Forms kullanarak; Xamarin.Forms.Xaml kullanarak; ad alanı HelloApp ( genel kısmi sınıf Uygulama: Uygulama ( genel Uygulama() ( InitializeComponent(); MainPage = new MainPage(); ) korumalı geçersiz kılma void OnStart() ( // Uygulamanız başladığında işleyin ) korumalı geçersiz kılma void OnSleep() ( / / Uygulamanız uyuduğunda işleyin ) korumalı geçersiz kılma void OnResume() ( // Uygulamanız devam ettiğinde işleyin ) )

App sınıfı çalışanı bir yapıcı ile başlar, nesnenin başlatılmasını yürüten InitializeComponent() yöntemini çağırır ve ardından MainPage yetkisini ayarlar. App sınıfının gücü sayesinde programın ana tarafı kurulur. Bu durumda, MainPage.xaml ve MainPage.xaml.cs dosyalarına atanan sınıfla aynı olan HelloApp.MainPage sınıfına atanır.

Alecey yolu bekar değil. Xamarin.Forms, hem C# kodu yardımı ile hem de xaml mov yardımı için bildirimsel bir şekilde html gibi görsel bir arayüz oluşturmanıza olanak tanır veya bunları birleştirebilirsiniz.

C# kodundan arayüz oluşturma

Dodamo, StartPage adlı bir C# sınıfıyla HelloApp projesine.

І bu sınıfta böyle bir yer önemli:

Xamarin.Forms'u Kullanmak; ad alanı HelloApp ( class StartPage: ContentPage ( public StartPage() ( Label header = new Label() ( Text = "Hi Xamarin Forms" ); this.Content = header; ) ) )

Bu sınıf, ContentPage sınıfına giren bir tarafı temsil eder. Yapıcı, kenar olarak ayarlandığı için metinle bir etiket oluşturur (this.Content = başlık).

MainPage'i başlangıç ​​sayfası olarak belirlemek için App sınıfını değiştirin:

Xamarin.Forms'u Kullanmak; ad alanı HelloApp ( genel kısmi sınıf Uygulama: Uygulama ( public App() ( InitializeComponent(); MainPage = new StartPage(); ) korumalı geçersiz kılma void OnStart() ( // Uygulamanız başladığında işleyin ) korumalı geçersiz kılma void OnSleep() ( / / Uygulamanız uyuduğunda işleyin ) korumalı geçersiz kılma void OnResume() ( // Uygulamanız devam ettiğinde işleyin ) )

Artık MainPage'in gücü, StartPage'in akıllıca katlanmış tarafına işaret ediyor.

Ayrıca, Visual Studio'nun en basit kodla yeni taraf sınıfları eklemek için bir şablon hazırladığı anlamına gelir. Bu nedenle, yeni bir sayfa eklemek için yeni bir öğe eklerken İçerik Sayfası şablonunu (C#) seçmeniz gerekir:

Bu sınıf, çözümün ana projesine eklenir (HelloApp durumunda).

Bir sonraki kodu sınıf tarafı matime ekleyin:

sistemi kullanarak; vicorist System.Collections.Generic; System.Linq kullanarak; vicorist System.Reflection.Emit; System.Text'i kullanarak; Xamarin.Forms kullanarak; ad alanı HelloApp ( public class Page1: ContentPage ( public Page1() ( Content = New StackLayout ( Children = ( New Label ( Text = " Hello Page " ) ) ) ) ) )

Bu sınıf aynı zamanda temel ContentPage sınıfından da düşer ve pratik olarak MainPage sınıfının yarattıkları ile aynı organizasyondur.

Ve program sınıfında bu tarafı başlangıç ​​olarak da ayarlayabilirsiniz:

Xamarin.Forms'u Kullanmak; ad alanı HelloApp ( genel kısmi sınıf Uygulama: Uygulama ( genel Uygulama() ( InitializeComponent(); MainPage = yeni Sayfa1(); ) //........... ) )

5

Düğmeler, metin alanları ve orantılar gibi Nintendo DS için GUI sisteminin birçok farklı sürümünü oluşturdum, ancak aynı zamanda bu sınıfları bir Gui sınıfına eklemenin bir yoluna ihtiyacım var, böylece anında çizebilirim ekrandaki her şey, hepsi arka arkaya ve hemen tüm düğmeleri çevirin, bu yüzden perevіriti, chi benzeri düğmelere bastı. Yemeğim, tüm sınıfları (örneğin düğmeler ve metin alanları) tek bir GUI sınıfında düzenlemenin en iyi yolu mu?

Düşündüğüm gibi eksen tek yönlü, ama doğru olanı bilmiyorum:

Düzenlemek: Ben muzaffer bir C++'ım.

Sınıf Gui ( public: void update_all(); void draw_all() const; int add_button(Button *button); // Button id void remove_button(int button_id); private: Button *buttons; int num_buttons; )

Bu kodun birkaç sorunu olabilir, ancak ben sadece istediklerim hakkında size bir uyarı vermek istiyorum.

  • 5 adım
  • Sıralama:

    Aktivite

2

İçerik, yayınlamayı seçtiğim içeriğe daha çok benziyor, Sony PSP'yi programlamak için yalnızca benimki kabul ediliyor.

Saatlerdir kurcalıyorum, bazı kitaplara ve VTM'lere danışıyorum ve basit kullanıcı arayüzü sistemleri fikri hakkında yapılması ve yapılmaması gerekenler.

Sınıf uiElement() ( ... virtual void Update() = 0; virtual void Draw() = 0; ... ) class uiButton() public: uiElement ( ... virtual void Update(); virtual void Draw() ; ... ) class uiTextbox() public: uiElement ( ... virtual void Update(); virtual void Draw(); ... ) ... // Diğer ui Elements sınıfı uiWindow() ( ... void Update (); void Draw(); void AddElement(uiElement *Element); void RemoveElement(uiElement *Element); std::list elementler; ... ) void uiWindow::Update() ( ... için (liste) ::yineleyici o = Elements.begin(); BT! = Elements.end(); it++) it->Güncelle(); ... ) void uiWindow::Draw() ( ... için (liste) ::yineleyici o = Elements.begin(); BT! = Elements.end(); it++) it->Çizim(); ... )

ilke - bir pencerenin oluşturulması ve çekirdeğin arayüzünün öğelerinin yeniye etkisi ve küçüklerin çağrısı ve en önemli temel işlevlerin yöntemlerinin güncellenmesi.

Hala yapacak bir şeyim yok çünkü boyama koduyla ilgili sorunlarım var. PC ve PSP'deki farklı API'ler ile OpenGL ve psp gu için sarmalayıcı kodunu inceliyorum.

yardım etmeyi umuyorum.

0

Bir temel strateji, bir hatırlatma olarak, belki bir bileşik model. Düşük düzeyde, tüm GUI nesnelerini (bu nesneler koleksiyonunu) oluşturulduktan sonra daha kolay işlemenize izin verebiliriz. Ancak GUI grafik arayüzünün tasarımıyla ne ilgisi olduğunu bilmiyorum, bu tek başına doğru yönü, projenin kaynak kodunu bilmenin yeridir. WxWidgets, erişilebilir bir çıkış koduna sahip platformlar arası bir grafik arabirimdir. Projenizde iyi şanslar!

0

3

Sessiz, hto zatsіkavleniya için, eksen my z vіdkritim vіhіdnym kodu, DS için BSD lisanslı GUI araç seti:

Konu2k hakkında rapor vermek güzel, ancak uiElement temel sınıfındaki alt arabirim öğelerinin intikamını almak için ana kodu ciddi şekilde tavsiye ederim. Vupsi'de diktiğim Tse zrazok.

Yakscho wi olumsuzluk Katlama, alt metin kutusu ve düğmeyi uygulamaya çalışırken ciddi sorunlar nedeniyle, temel sınıftaki kodu yükseltin. Örneğin:

  • Tablo paneller, karşılıklı vinyatkovist seçimini sağlayan coristuva arayüzünün tek bir öğesinde gruplandırılmış bir grup düğme olarak modellenebilir;
  • Radyo istasyonu grupları (bir saatlik);
  • Smogi kaydırma, bir kaydırıcı/oluk öğesi ve yukarı/aşağı düğmeleri olarak sunulabilir;
  • Kaydırılabilir listeler, kapsayıcı görünümünde ve coristuvach arayüzündeki çıkartma öğelerinde sunulabilir.

Ek olarak, bellek depolama, DS, hem programınızı kaydetmek hem de indirmek için kullanılabilecek 66 MHz ve 4 MB RAM frekansına sahip bir işlemciye sahip olabilir (DS diskleri başlatılmadan önce RAM'e yüklenir). Sistemin nasıl kurulduğuna bakmak gerçekten sizin hatanız, yani STL çalışmıyor. STL'yi Woopsi'den indirdim ve 0,5 MB yakınlaştırma kaydettim. Zemin standartlarının gerisinde o kadar zengin değil, ancak yine de en erişilebilir DS belleğinin 1/8'i, spozhivaya STL-smіttya.

Koristuvach'ın arayüzünü yazma sürecinin tamamını blogumda bildirdim:

Ekranı yeniden boyamak için bulduğum iki algoritmanın bir tanımını içerir; bu, grafiksel bir arayüz oluşturmanın zor bir kısmıdır (biri dikdörtgenleri yokuş yukarı bölmek ve görünür alanları hatırlamaktır, diğeri ise BSP vicorist ağacıdır. anlamak için daha verimli ve daha basittir), toscho d.

Windows 7