Hi, ich habe die Version 1.0 einer "einfachen" GUI für das STM32F429 Disco-Board als OpenSource-Projekt fertig. Ein paar Demo-Bilder hab ich angehängt. hier der Link : http://mikrocontroller.bplaced.net/wordpress/?page_id=4723 das ganze ist natürlich noch ausbaufähig und sicher nicht fehlerfrei, wer will kann es aber als "Basis" benutzen. Für einen Port auf eine andere CPU und ein anderes Display/Touch hier ein paar Infos : Alle Files sind Hardware unabhängig, bis auf zwei Files : 1. "stm32_ub_sgui.c" hier wird das angeschlossene Display und der Touch initialisiert (das muss von euch angepasst werden) es gibt hier auch eine ISR die per Timer jede ms aufgerufen werden muss Der Touch wird dann alle 50ms gepollt und die Touch-Daten werden in eine Struktur kopiert. 2. "ub_sgui_screen.c" hier stehen die einzelnen Aufrufe für das Display drin, also Linien, Punkte, gefüllte Rechtecke, Texte zeichnen usw. diese Funktionen müsst ihr auch an eure Hardware anpassen Der Rest sollte "eigentlich" ohne Änderung überall laufen ;-) Gruss Uwe
:
Bearbeitet durch User
Schick schick. Ich arbeite gerade auch an einer GUI in "reinem" C ;) Werd mal reinschauen. Danke übrigens für deine tolle library. Hat mir den Einstieg echt leicht gemacht und schön verifizierbar. Echt tolle Arbeit.
@Rene, die größte "Arbeit" ist eigentlich das zeichnen der Komponenten zur Laufzeit da kann man beliebig viel Zeit investieren ich habe es mir recht einfach gemacht und z.B. bei einer Listbox den Slider nicht animiert usw. aber das ist reine Fleißarbeit, wer will kannn das noch hinzufügen :-) Mit kommerziellen Produkten kann man es natürlich nicht vergleichen mir ging es aber mehr ums Prinzip als um einen Designpreis.
Whaaaa!!! Und wer bezahlt mir jetzt die Augenkrebs-Behandlung? Wobei: es hat einen gewissen 1970er Retro-Charme ;-)
Ich möchte den Thread gern mal hochholen dürfen :) Ich habe eine Listbox mit mehreren Einträgen. Die Einträge möchte zum Zeitpunkt x alle verwerfen und durch 12 neue, gänzlich andere Einträge ersetzen. Im Augenblick verfahre ich so: Ich hole mir mit SGUI_ListboxGetItemCnt die Anzahl der Einträge und lösche in einer For Schleife alle Einträge mit SGUI_ListboxDeleteItem Anschliessend lade ich die neuen Einträge mit SGUI_ListboxSetItem Kann man nicht die Listbox einfach "drüberinitialisieren"? Einfach ein SGUI_ListboxCreate mit gleichem Namen ausführen? Danke fürs Lesen... Axelr. DG1RTO
Quibby schrieb: > Wobei: es hat einen gewissen 1970er Retro-Charme ;-) Ich finds gut. Erinnert doch schön an die guten alten Motif Zeiten :)
Ich finds auch RICHTIG klasse - allein die Arbeit, die da hinter steckt. Da muss ich unbedingt ... Verschickt Fleurop auch Bier? Aber ich möchte gern noch was hinterher schicken. Ich habe das Gefühl, das SGUI_ListboxDeleteItem ansich nicht funktioniert. Ich habe das jetzt erst einmal so umschifft, das ich die 78 nicht sehenswerten Einträge mit " " überschreibe und die neuen 12 Einträge mit SGUI_ListboxSetItem ab Index 0 neu belege. Speicher ist ja genug vorhanden. Ich habe das löschen der Einträge schon mit einem kleinen Delay(50ms) und einem "Scoobydoo" ( SGUI_Do(); ) in der Schleife visualieren wollen, damit der User sieht, das hier was gelöscht wird. Flackert auch ein wenig und die Zeit vergeht auch entsprechend, die Einträge bleiben aber in der Listbox erhalten und verschwinden leider nicht nach und nach - hmm Axelr. DG1RTO
> Ich finds gut. Erinnert doch schön an die guten alten Motif Zeiten :) Sobald es soweit kommt das an wirklich jedem Microcontroller ein Display mit 640x480 haengt, raff ich mich mal auf und implementiere open-look. https://en.wikipedia.org/wiki/Olwm So langsam erreichen unsere Toaster ja die Rechenleistung von den Luxusrechnern die wir damals hatten. :-) Eine andere Moeglichkeit waere noch das alte PalmOS (so V2.0) nachzubauen. Das stellt nur sehr geringe Ansprueche an die Hardware. Der Vorteil den soetwas haette liegt darin das damals uebliche Tools, Beispielprogramme und Fachliteratur verwendbar wird. Das spart erheblich Arbeit ein. Olaf
Olaf schrieb: >> Ich finds gut. Erinnert doch schön an die guten alten Motif Zeiten :) > > Sobald es soweit kommt das an wirklich jedem Microcontroller ein Display > mit 640x480 haengt, raff ich mich mal auf und implementiere open-look. > > https://en.wikipedia.org/wiki/Olwm > > So langsam erreichen unsere Toaster ja die Rechenleistung von den > Luxusrechnern die wir damals hatten. :-) > > Eine andere Moeglichkeit waere noch das alte PalmOS (so V2.0) > nachzubauen. Das stellt nur sehr geringe Ansprueche an die Hardware. Nein, besser nicht. Vorallem wenn es mehr als nur das Aussehen der Oberfläche sein soll. PalmOS hat/ist 1. das imo eklige Resourcen-System der älteren MacOS-Versionen 2. auf einem 68k mit 24/32-Bit-Adressen so gut wie alles auf 65536 Bytes beschränkt 3. ein bescheidenes API. Simples Beispiel: Text in einem Texteingabefeld vorbelegen:
1 | MemHandle newTextHandle, oldTextHandle; |
2 | MemPtr newTextP; |
3 | FieldPtr fieldP; |
4 | FormPtr formP; |
5 | |
6 | formP = FrmGetActiveForm(); |
7 | if (!formP) ... |
8 | |
9 | // das OS hat bei einem Event natürlich nicht den Objektindex |
10 | // oder die aktive Form mitgeliefert... |
11 | fieldP = FrmGetObjectPtr(formP, FrmGetObjectIndex(formP, FIELDRESOURCEID)); |
12 | if (!fieldP) ... |
13 | |
14 | newTextHandle = MemHandleNew(StrLen(textP) + 1); |
15 | if (!newTextHandle) ... |
16 | newTextPtr = MemHandleLock(newTextHandle); |
17 | if (!newTextPtr) ... |
18 | |
19 | StrCopy(newTextPtr, textP); |
20 | |
21 | oldTextHandle = FdlGetTextHandle(fieldP); |
22 | FldSetTextHandle(fieldP); |
23 | |
24 | MemHandleUnlock(newTextHandle); |
25 | if (oldTextHandle) MemHandleFree(oldTextHandle); |
26 | |
27 | FldDrawField(fieldP); |
> Der Vorteil den soetwas haette liegt darin das damals uebliche Tools, > Beispielprogramme und Fachliteratur verwendbar wird. Das spart erheblich > Arbeit ein. Nein, siehe Codebeispiel...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.