[#1] Gadget "STRGADGET" i kolory tekstu?
Kiedy tworzymy gadget typu: STRGADGET stanowiący pole do wprowadzania ciągów
liter albo cyfr, dane tego gadgetu opisuje struktura (StringInfo) nie ma w niej
jednak pola określającego kolory tekstu. Jak zmienić kolor liter?
[#2] Re: Gadget "STRGADGET" i kolory tekstu?

@68k_tester, post #1

Wybacz, że będzie totalnie offtopicowo ale widzę, że jesteś bardzo aktywny w programowaniu 68k. Szykujesz jakiś większy projekt? Program? Grę?



benedykt Dziubałtowski

[#3] Re: Gadget "STRGADGET" i kolory tekstu?

@Benedykt Dziubałtowski, post #2

Kilku dawnych fanów Amigi500 którzy dziś są zawodowymi projektantami elektroniki
zabawia się hobbistycznie w dorabiane przedziwnych hardware'owych udoskonaleń.
Zawsze lubiłem procesory 68k więc pomagam od strony oprogramowania.
[#4] Re: Gadget "STRGADGET" i kolory tekstu?

@68k_tester, post #3

Mam nadzieje ze opublikujecie gdzies te Wasze wynalazki wraz ze schematami ,zdjeciami i opisami.Napewno wielu to zainteresuje :)
sry za offtopic ;)

[#5] Re: Gadget "STRGADGET" i kolory tekstu?

@Hellena, post #4

To nie są projekty komercyjne więc bardzo chętnie.
Jak tylko pojawią się jakieś działające efekty.
[#6] Re: Gadget "STRGADGET" i kolory tekstu?

@68k_tester, post #5

Ja też widzę, że jesteś bardzo aktywnym programistą na tym forum. Z niecierpliwością czekam na efekty Twojej pracy :)



Ostatnia modyfikacja: 18.07.2009 13:56:28
[#7] Re: Gadget "STRGADGET" i kolory tekstu?

@68k_tester, post #1

Podejrzewam, że chyba tego koloru nie da się zmienić w programie. Zapewne można go zmienić, ale tylko w preferencjach Workbencha.

[#8] Re: Gadget "STRGADGET" i kolory tekstu?

@Minniat, post #7

Przypuszczalnie można dokonać takiej modyfikacji koloru poprzez zmiany w strukturze (Layer).Wskaźnik do (Layer) umieszczono w (StringInfo).Jednak o tym czym są warstwy layer w Amigowskiej grafice wiem zbyt mało.
Czy ktoś potrafi to zrobić?
[#9] Re: Gadget

@68k_tester, post #8

Witam,

Mógłbyś umieścić źródełko minimalnej wersji tego problemu ?

Pozdrawiam



Ostatnia modyfikacja: 20.07.2009 12:47:50
[#10] Re: Gadget

@asman, post #9

Nie mam nawet pomysłu na dalsze próby.... więc jak rozumiem chodzi o przykład na jakim testowałem?

Oto prosty gadget do wprowadzania cyfr. Wprowadzane w nim wartości są zawsze w kolorze podstawowym jak to zmienić?



;--------------------------------------------------------------------
;Program: (1).Test otwarcia Okna na ekranie Workbench.
; (2).Test gadgetu typu pole wprowadzania tekstu.
; (3).Test odbierania komunikatu IDCMP z okna i gadgetu.
; (4).Pobranie wartości cyfrowej wpisanej w polu edycyjnym.

;Procesor: MC68000 (68k)
;Assembler: DevPac v3.02 (HiSoft)
;Platforma: Amiga 500 (OS v1.3) Kickstart (v34)
;Data/Czas: 2009-07-15/23:40

Exec: equ 4
OldOpenLibrary: equ -408
CloseLibrary: equ -414
OpenWindow: equ -204
CloseWindow: equ -72
WaitPort: equ -384
GetMsg: equ -372
ReplyMsg: equ -378


;Pola bitowe zmiennej (Type) struktury (NewWindow)

CUSTOMSCREEN: EQU $000F ;Wyswietl okno na osobnym Screen
WBENCHSCREEN: EQU $0001 ;Wyswietl okno na Workbench'u

;Pola bitowe zmiennej (Flags) struktury (NewWindow)

WINDOWEMPTY: EQU $0000 ;Puste okno jedynie obramowane.
WINDOWSIZING: EQU $0001 ;Gadget do zmiany rozmiaru okna.
WINDOWDRAG: EQU $0002 ;Belka do przemieszczania okna.
WINDOWDEPTH: EQU $0004 ;Gadgety do chowania/odkrywania okna.
WINDOWCLOSE: EQU $0008 ;Gadget do zamykania okna.
REPORTMOUSE: EQU $0200 ;Informacje o poruszaniu myszki.
GIMMEZEROZERO: EQU $0400 ;Rysowanie w oknie od pozycji 0,0
BORDERLESS: EQU $0800 ;Okno nie ma linii obramowania.
ACTIVATE: EQU $1000 ;Otwierane okno ustawione jako aktywne.
RMBTRAP: EQU $10000 ;Gdy to okno aktywne brak opcji menu.

;Pola bitowe zmiennej (IDCMP_Flags) struktury (NewWindow)

GADGETDOWN: EQU $0020 ;Lwey przycisk myszy jest wciśnięty.
GADGETUP: EQU $0040 ;Lewy przycisk myszki wciśnięto i zwolniono.
CLOSEWINDOW: EQU $0200 ;Dostaniemy komunikat z gadgetu zamykania.

;Flags bit status for Gadget struct.

GADGHCOMP: EQU $0000 ;Po wcisnieciu gadget zmienia kolor tla.
GADGHBOX: EQU $0001 ;Po wcisnieciu gadgetu rysuje na okolo niego ramke.
GADGHIMAGE: EQU $0002 ;Po wcisnieciu wstawia grafike z danych pola (Image Ptr)
GADG_DISABLED: EQU $0100
GADG_SELECTED: EQU $0080 ;Aktywny odrazu

;Activation bit status for Gadget struct.

RELVERIFY: EQU $0001 ;Sygnalizuj oknu puszczenie lewego przycisku myszy.
GADGIMMEDIATE: EQU $0002 ;Sygnalizuj oknu wcisniecie lewego przycisku myszy.
STRINGCENTERED: EQU $0200 ;centruje text w gadgecie
LONGINT: EQU $0800 ;tylko cyfry możemy wprowadzac do pola edycyjnego.

;Gadget Type bits status for Gadget struct.

BOOLGADGET: EQU $1 ;przycisk
STRGADGET: EQU $4 ;pole do wprowadzania tekstu





;Umieszczenie programu w pamięci CHIP-RAM.

SECTION Program,CODE_C


Start: move.l Exec,a6
lea IntName(pc),a1
jsr OldOpenLibrary(a6)
tst.l d0
beq Error_0
move.l d0,IntBase ;przechowanie uchwytu biblioteki

;-----------------------
move.l IntBase,a6
move.l #NewWindow,a0
jsr OpenWindow(a6)
tst.l d0
beq Error_1
move.l d0,WindowBase ;przechowanie uchwytu okna

;----------------------
;UWAGA: Funkcja WaitPort czeka na komunikat czyli gdy port MsgPort przestanie byc pusty.

Loop: move.l WindowBase(pc),a0
move.l $56(a0),a0 ;pobieramy MsgPort czyli UserPort okna.
move.l Exec,a6
jsr WaitPort(a6) ;czekamy na jakikolwiek komunikat dostarczony oknu.

move.l WindowBase(pc),a0
move.l $56(a0),a0
move.l Exec,a6
jsr GetMsg(a6) ;odbieramy komunikat.
tst.l d0
beq.s Loop

move.l d0,a1
move.l 20(a1),d2 ;do rej.D2 pobieramy rodzaj komunikatu IDCMP
move.l 28(a1),a2 ;do rej.A2 pobieramy adres gadgetu ktory wyslal komunikat.
move.l Exec,a6
jsr ReplyMsg(a6) ;zwracamy strukture komunikatu.

cmp.l #CLOSEWINDOW,d2 ;czy to gadget zamykania okna.
beq.s Koniec
cmp.l #GADGETUP,d2 ;czy to nasz gadget.
beq.s Gadget_Click
bra.s Loop ;wracamy do oczekiwania na kolejny komunikat.
;----------------------

Gadget_Click: ;teraz w rej. a2 mamy adres gadgetu który wyslal komunikat "GADGETUP"

clr.l d0
move.w 38(a2),d0 ;teraz do rej. d0 pobieramy pole Gadget_ID
;z gadgetu ktory wyslal komunikat i na podstawie
;numeru z pola Gadget_ID identyfikujemy dany gadget!
cmp.w #1,d0 ;Tu sprawdzamy numer gadgetu z pola Gadget_ID struktury gadget'u
beq.s Gadget_Nr1
bra.s Loop ;Wracamy do oczekiwania na komunikaty IDCMP
;----------------------


Gadget_Nr1: ;Teraz po wprowadzeniu liczby i wciśnięciu (Enter) pobieramy liczbę.......

move.l WprowadzonaLiczba,d0

;..................

;tu reszta programu!!!!!

;........ bra.s Loop



;----------------------
Koniec: move.l IntBase,a6
move.l WindowBase,a0
jsr CloseWindow(a6)
;-----------------------
Error_1: move.l Exec,a6
move.l IntBase,a1
jsr CloseLibrary(a6)
clr.l d0
rts
Error_0: moveq #-1,d0
rts

;--------------------------------------------------------------
NewWindow: DC.W 0 ;X Lewy gorny rog okna
DC.W 0 ;Y Lewy gorny rog okna
DC.W 320 ;Szerokosc okna
DC.W 200 ;Wysokosc okna
DC.B 0 ;Kolor tla
DC.B 1 ;Kolor atramentu
DC.L CLOSEWINDOW+GADGETUP ;IDCMP_Flags
DC.L WINDOWCLOSE+WINDOWDRAG+ACTIVATE ;Window Flags
DC.L Gadget ;Gadget Ptr
DC.L 0 ;Image Ptr
DC.L NazwaOkna ;wskaznik do nazwy na belce
DC.L 0 ;Screen Ptr
DC.L 0 ;BitMap Ptr
DC.W 100 ;Minimalna wysokosc
DC.W 100 ;Minimalna szerokosc
DC.W 320 ;Maksymalna wysokosc
DC.W 180 ;Maksymalna szerokosc
DC.W WBENCHSCREEN ;Type ScreenFlagSet


NazwaOkna: DC.B '<-- Close Window!',0
WindowBase: DC.L 0
;--------------------------------------------------------------
IntBase: DC.L 0
IntName: DC.B 'intuition.library',0
;--------------------------------------------------------------
Gadget: dc.l 0 ;Next Gadget Ptr
dc.w 50 ;Left Edge
dc.w 50 ;Top Edge
dc.w 100 ;Width
dc.w 30 ;Height
dc.w GADGHCOMP+GADG_SELECTED ;Flags
dc.w GADGIMMEDIATE+RELVERIFY+LONGINT ;Activation
dc.w STRGADGET ;Gadget Type
dc.l Border ;Render Ptr adres Border lub Image
dc.l 0 ;Image Ptr
dc.l 0 ;GadgetText Ptr
dc.l 0 ;MutualExclude
dc.l StringInfo ;SpecialInfo
dc.w 1 ;Gadget_ID
dc.l 0 ;UserData
;---------------------------------------------------------------
Border: dc.w -4 ;Left Edge
dc.w -2 ;Top Edge
dc.b 1 ;FrontPen kolor linii
dc.b 0 ;BackPen kolor tla
dc.b 0 ;DrawMode tryb rysowania
dc.b 9 ;CountLine liczba punktow rysowania ramki jaka zawiera tabela XY.
dc.l TabelaLini ;XY Ptr adres tabeli zawierajacej wspolrzedne punktow ramki.
dc.l 0 :Next Border Ptr
;--------------------------------------------------------
TabelaLini: dc.w 0,0 ;Tu rysujemy ramke
dc.w 94,0 ; przycisku
dc.w 94,11 ;rozmiary ramki moga
dc.w 0,11 ;byc mniejsze od rozmiaru
dc.w 0,0 ;pola przycisku.
dc.w 1,0
dc.w 1,11
dc.w 93,11
dc.w 93,0
;--------------------------------------------------------
StringInfo: dc.l BuforNapisu ;wskaznik na bufor zawierajacy tekst edytowany.
dc.l 0 ;wskaznik na fufor do operacji undo(Amiga+Q) lub 0.
dc.w 0 ;tu podajemy ktory znak z BuforaNapisu jest pod kursorem.
dc.w 11 ;wielkosc bufora na edytowane lub wprowadzane znaki.
dc.w 0 ;pierwszy znak z bufora wyswietlany w obrembie gadget'u
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.l 0
dc.l 0
WprowadzonaLiczba: dc.l 0 ;wartość wpisana w gadgecie typu LONGINT
dc.l 0
;--------------------------------------------------------
BuforNapisu: dc.b '0123456789'
dcb.b 32,0 ;rezerwujemy 32 bajty wypełniając zerami.
;--------------------------------------------------------
[#11] Re: Gadget

@68k_tester, post #10

pierwsze pytanie:
dlaczego nie piszesz w C częsci kodu?

pytanie drugie:
masz wszyskie RKRM ?

pytanie trzecie:
gadzetujesz na gadtools czy hardkorowo na intuition ?

ps. podziwiam to co robisz, mi nigdy się nie chciało uczyć assemblera

[#12] Re: Gadget

@rzookol, post #11

To co pisze musi być na Amige500.

Staram się sklecić kilka własnych bibliotek aby zminimalizować stosowanie
obcego kodu... lub czegoś co ma prawa autorskie.Preferuje raczej intuition
i nazwiązanie do konwencji graficznego środowiska systemu 1.3

Co do RKRM.. dostałem kilka linków i pliki w formacie amiga.guide ale
nie zawsze odnajduje tam właściwe informacje.

Mam jedynie Aztec C jest to antyk z 1987r a inne kompilatory na A500 obecnie
nie są do zdobycia.

Assembler 68K jest wyjatkowo elastyczny i przyjazny dla programisty.
Pisanie w nim to przyjemność.
[#13] Re: Gadget

@68k_tester, post #12

Polecam stronke eab.abime.net. Jest tam paru speców od a500 i programowania pod nią, w tym osoby odpowiedzialne za whdload

[#14] Re: Gadget

@68k_tester, post #10

Dzięki za kod ( pewnie przed weekendem uda mi się sprawdzić ). Ja widzę taką możliwość. Dodać Layer do struktury StringInfo i poprzez rastport z Layera zmienić pen A na ten przykład. Nie wiem czy to przyniesie rezultat. Zatem trzeba by
1. otworzyć layer.library ( na końcu ją zamknąć )
2. pobrac Layer_Info strukture za pomocą NewLayerInfo ( na końcu zwolnić DisposeLayerInfo )
3. potem CreateUpfronLayer
4. zmienić pen A za pomocą setAPen i rastporta z layera
5. podpiąć pod StringInfo i wyczekiwać cudu :)

Pozdrawiam



Ostatnia modyfikacja: 21.07.2009 10:55:00
[#15] Re: Gadget

@asman, post #14

Przysiedziałem wczoraj nad tym i lipa. Próby dodania layera spełzły na niczym bo zwyczajnie po dodaniu wskaźnika na layer nic się nie zmienia ( sprawdzałem na kick 3.0 i kick 1.3 ). Morał z tego taki, że albo jestem za słaby albo coś źle robię ( nawet próbowałem podać layera z okna w string info - wiem to niebezpieczne i faktycznie tak było ). Być może od 2.0 w góre istnieje taka możliwość ( zmiany kolorów ) ale ja jestem waflem w temacie gadgetów.

Pozdrawiam

[#16] Re: Gadget

@asman, post #15

W zasadzie nie znam sie w ogole na gadzetach (oprocz dwoch roznych konfigow do playerow, ktore dostalem od Petera Kunatha i pozniej przerobilem z pomoca Codetappera). Ale czy nie lepiej do tej zabawy (?) z gadzetami pod OS 1.3 uzyc bibliotek gadtools13 i reqtools?
Poza tym nie wiem poco wrzucasz kod (Code_C) do Chip RAM-u, w Chip Ramie lepiej trzymaj tylko grafike i dzwieki/muzyke (uzyj Section Data_C lub BSS_C). I na koniec jesli cos wymaga OS 2.0 lub wyzej to nie znaczy ze nie pojdzie pod OS 1.3, wystarczy tylko (?) wyciac dana procedure z ROM-u i potem zaadaptowac to w swoim programie, troche roboty z tym jest ale jezeli to jest tylko jedna lub dwie funkcje to da sie zrobic jak ktos ma duzo czasu.
[#17] Re: Gadget

@asman, post #15

Moje kolejne testy też nic nie dały.Filerequester mam już prawie skończony więc ten detal jego wyglądu
pozostawie do dopracowania w przyszłości... teraz muszę znaleźć sposób na zablokowanie przerwań Amigi
na czas programowania sektora... czyli powiększyć wiedzę na temat hardware. Dzięki za pomoc i czas
poświęcony na testowanie.Zapewne rozwiązanie jest proste i natrafimy na nie jak zwykle przypadkowo...
Pozdrawiam.
[#18] Re: Gadget

@asman, post #15

To tylko kod testowy,wzorcowa A500 ma jedynie CHIP-RAM,zresztą gdyby okazało się ,że jakaś struktura wymaga CHIP-RAM'u zwiększamy szanse
na wykrycie takiej sytuacji.



Ostatnia modyfikacja: 25.07.2009 00:54:08
[#19] Re: Gadget

@68k_tester, post #18

Ja tu czegoś nie rozumiem i mam pytanie. A kiedy to ma się okazać,że jakaś struktura wymaga CHIP ram ? Jak zwiśnie Ci program ???

[#20] Re: Gadget

@asman, post #19

Zapewne wyraziłem się nieprecyzyjnie.Chodziło mi o zwiększenie szans na właściwe zadziałanie.
[#21] Re: Gadget

@68k_tester, post #20

68k_tester napisał(a):

> Zapewne wyraziłem się nieprecyzyjnie. Chodziło mi o zwiększenie
> szans na właściwe zadziałanie.

OK, byc moze. Ale po co CODE_C?? ;-D

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem