kategoria: Blitz
[#1] [blitz] pytania ... (i odpowiedzi ?)
Czesc
jak w Blitz-ie dobrac sie do "FirstScreen" (Intuition Base), czyli tego:


Ja nie mam pojecia - szukam po wszelakich dostepnych listingach, przegladam dokumentacje ale dalej stoje w miejscu.

Potrzebuje liste wszystkich otwartych ekranow i zakladam ze tedy droga (potem uzyc musze tylko Screen.NextScreen)

By miec ekrany publiczne to moge zrobic tak:
Dim scr$(500)              
*scrs.List=LockPubScreenList_ ()
  *mynode.Node=*scrs\lh_Head 

  count.w=0
  While *mynode\ln_Succ
    count+1
    scr$(count)=Peek$(*mynode\ln_Name)
    *mynode=*mynode\ln_Succ
  Wend

UnlockPubScreenList_
... ale to tylko erany publiczne, niestety.
A ja potrzebuje wszystkie

Ostatnia aktualizacja: 13.01.2018 21:14:42 przez peceha
[#2] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #1

*ibase.IntuitionBase = IntuitionBase
*fs.Screen = *ibase\FirstScreen

I już masz adres pierwszego ekranu.
[#3] Re: [blitz] pytania ... (i odpowiedzi ?)

@Ocelot, post #2

Należy pamiętać (co zresztą widać w pliku nagłówkowym) o uprzednim zablokowaniu bazy biblioteki intuition za pomocą LockIBase(), pobraniu właściwego adresu (FirstScreen) i odblokowaniu bazy za pomocą UnlockIBase().
[#4] Re: [blitz] pytania ... (i odpowiedzi ?)

@Ocelot, post #2

@Ocelot
Dzieki - wiedzialem, ze gdzies dzwonia ... hehe
Mialem cos takiego:
DEFTYPE.library  *intuiBase
....
*intuiBase=OpenLibrary_("intuition.library",36)
...
*fs._Screen=*intuiBase\FirstScreen
...

(uzywam "amigalibsII.res" i chyba dlatego mam musze deklarowac jako "_Screen" a nie "Screen")
i myslalem ze tak oto dostane IntuitionBase.. niestety ciagle wywalalo mi blad: "Offset not found"
A tu, no prosze, okazalo sie ze jest analogicznie jak z Exec:
*exec.ExecBase=Peek.l(4)"

Dzieki wielkie !!

Teraz jeszce jakbys mogl napisac co dalej szeroki uśmiech tzn przegladam te pliki typu "screens.h" i tam widze ze tytul okna jest jako UBYTE *Title czyli jak mam go odczytac? I czy ta gwiazdka przed "Title" oznacza ze to jest wskaznik i bede musial uzyc "Poke"?

"Odrobinke"szeroki uśmiech sie to rozni od Hollywood no i niestety zaginalem w akcji, hehe.


@Hexmage
Pamietam o tym doskonale wczoraj przejrzalem tyle stron i przeczytalem milion listingow (niestety C) ze juz mi to zostalo w glowie by uzyc LockIBase(). Ale Dzieki za przypomnienie.


Ostatnia aktualizacja: 14.01.2018 09:42:09 przez peceha
[#5] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #4

Tak. Gwiazdka oznacza, że jest to wskaźnik.
tytul.s=Peek$(*fs\Title)
[#6] Re: [blitz] pytania ... (i odpowiedzi ?)

@Ocelot, post #5

OK
[#7] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #1

Mam kolejne:

jak w Blitz-ie wymusic RMB?

Nie chodzi mi o wbudowana komende MOUSEBUTTON tylko raczej jak to wymusic poprzez odwolania do bibliotek systemowych (przynajmniej chcialbym wiedziec ktorych).

MOUSEBUTTON nie nadaje sie do tego co chcialbym zrobic bo gdy "zasymuluje" nim wcisniecie i trzymanie RMB to automatycznie blokuje wszystkie "event-y" wysylane do okna do czasu gdy go nie puszcze.

A wlasnie chcialbym miec mozliwosc nasluchiwania zdarzen klawiatury i klawiszy myszki majac wcisniety RMB (czyli majac aktywne gorne MENU).
[#8] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #1

Nastepne:
gdzie tu jest blad?

NEWTYPE.lista
 a.w
 b.s
END NEWTYPE

Dim List test.lista(5)

If AddItem(test()) Then test()a=56
....


przy kompilacji dostaje blad:
Can't assign expression

ktory wskazuje na linie z "If"

Ostatnia aktualizacja: 14.01.2018 22:50:46 przez peceha
[#9] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #8

If AddItem(test()) Then test()\a=56

teraz zdziala, brakowalo "\" - blad byl w przykladach ktore przegladalem.
[#10] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #9

Pytanie o LISTY:

czy jest komenda, ktora podaje mi aktualna ilosc pozycji na liscie?
Chcialbym dostac losowy element z listy.

Na te chwile (znajac jedynie okolo 2% blitz-a) doszedlem do czegos takiego (nawet nie wiem czy zadziala bo z glowy pisalem, bez manuala)
c=0
ResetList lista()
While NextItem(lista())
  c+1
Wend

random=Rnd(c)

c=0
ResetList lista()
While NextItem(lista())
  If c=random then Pop While
  c+1
Wend

mojaUpragnionaDana = lista()   ;skoro wskaznik listy pokazuje na zmienna na pozycji "random" to mam nadzieje ze ten zapis jest poprawny ?

az mnie glowa rozbolala...
[#11] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #10

Czy listy nie moga byc deklarowane w funkcjach?

jesli cos takiego:
NEWTYPE.mojTyp
 a.b
 b
 c
End NEWTYPE
Dim List lista.mojTyp(100)
If AddItem(lista()) Then lista()\a=1

mam w funkcji to kompilator wywala :
ARRAY IS NOT A LIST

gdy wyjme to poza funkcje wszystko gra.

Ostatnia aktualizacja: 16.01.2018 17:30:37 przez peceha
[#12] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #11

Tym razem mam pytanie o kompilowanie/debugger

W swoim kodzie mam na poczatku kilka INCLUDE do innych plikow bb2.
Podczas kompilacji czasami wywala mi blad (normalne) po ktorym kompilator sie zatrzymuje.
Jesli blad jest w pliku glownym to spoko ale jesli w dolaczonym to kompilator wskazuje na linie INCLUDE z pliku glownego - czyli taka informacja to praktycznie o kant ... bo i tak nie wiem co i gdzie.

Na razie rozwiazalem to tak ze przegrywam zawartosc "include-ow" do skryptu glownego, i poprawiam a potem przenosze je na swoje miejsce.

Czy jest inny sosob?
[#13] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #12

Czy w blitz-ie gdy mam otwarte okno intuition to nie moge rysowac "shapes" do tego okna komendami typu blit" ?
[#14] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #13

Mozna.
Nie ma tego manualu (przynajmniej w wersji ktora posiadam) ale bylo w innej publikacji:
BitMaptoWindow

a nastenie uzywac:
WBlit


Ostatnia aktualizacja: 26.01.2018 13:36:47 przez peceha
[#15] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #14

Byc moze to pytanie nie koniecznie do tych znajacych Blitz-a.
Jakie by nie bylo jest to dla mnie czarna magia (na razie) hehe.

jak zdobyc informacje pokazana na obrazku? (chodzi o "znacznik" ekranu)


DODALEM
mam juz "pointer" do struktury interesujacego mnie ekranu tylko nie wiem co dalej.


Ostatnia aktualizacja: 30.01.2018 15:55:29 przez peceha
[#16] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #15

Hej, do pobrania struktury Screen jest specjalna funkcja w bibliotece intuition o nazwie GetScreenData(), która pobiera jej kopię:

GetScreenData -- Get copy of a screen data structure.

Zaś jeśli chodzi o pole Flags to w języku C wyodrębnisz Typ ekranu w następujący sposób:
typ = screen->Flags & SCREENTYPE

Możesz tego użyć następnie w taki sposób (język C):
if (typ == PUBLICSCREEN) 
    /* Ekran publiczny */; 
else if (typ == CUSTOMSCREEN) 
    /* Ekran prywatny */;
[#17] Re: [blitz] pytania ... (i odpowiedzi ?)

@Hexmage960, post #16

Dzieki serdeczne - zaraz bede z tym kombinowal.
Wlasnie takich podpowiedzi szukam bo bezposrednio pod Blitz-a znajde malo a znowu szukajac pod C bym musial przejrzec PELNO listingow i stracic duzo czasu.

Dzieki
[#18] Re: [blitz] pytania ... (i odpowiedzi ?)

@Hexmage960, post #16

Czy ja dobrze kombinuje?

skoro:

typ = screen->Flags & SCREENTYPE


SCREENTYPE (patrzac na moj obrazek z postu wyzej) to %1111 (bo ma wartosc $F)
ekran publiczny to %0010 (wartosc $2)
czyli zmienna "typ" powinna miec wartosc %0010, tak?

hmmm, u mnie WB ma %00...
WB - %00
edytor blitza ("file - ") %10 - nie jest publiczny
MultiView - %11 - gwarantuje ze nie jest publiczny
paleta WB - %00 - nie wiem


Byc moze cos popieprzylem bo kombinuje jak kon pod gore szeroki uśmiech

Ostatnia aktualizacja: 30.01.2018 16:50:40 przez peceha
[#19] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #18

WB musi mieć flagę WBENCHSCREEN więc źle odczytujesz pole flags.
WBToScreen 0
DEFTYPE .Screen *scr
*scr=Peek.l(Addr Screen(0))
NPrint Bin$(*scr\Flags)


Ostatnia aktualizacja: 30.01.2018 17:17:00 przez cholok
[#20] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #18

SCREENTYPE (patrzac na moj obrazek z postu wyzej) to %1111 (bo ma wartosc $F)
ekran publiczny to %0010 (wartosc $2)
czyli zmienna "typ" powinna miec wartosc %0010, tak?

Tak. Zmienna "typ" przyjmuje wartość WBENCHSCREEN, PUBLICSCREEN lub CUSTOMSCREEN (bo robimy bitową koniunkcję z maską czyli SCREENTYPE).


hmmm, u mnie WB ma %00...
WB - %00
edytor blitza ("file - ") %10 - nie jest publiczny
MultiView - %11 - gwarantuje ze nie jest publiczny
paleta WB - %00 - nie wiem

Weź pod uwagę 4 końcowe bity pola Flags, nie 2.

Workbench powinien mieć %0001 (WBENCHSCREEN)
Ekran publiczny: %0010 (PUBLICSCREEN)
Ekran prywatny: %1111 (CUSTOMSCREEN)
[#21] Re: [blitz] pytania ... (i odpowiedzi ?)

@cholok, post #19

wybaczcie ze obrazek ale program mam na Amidze wiec:

Tak wlasnie mam to wtej chwili zrobione. Te cyfry po lewej to ostatnie 4 bity zamienione na dziesietny.

Hexmage podpowiedzial duzo swoim postem (operacja &) i dlatego wogole ruszylem z miejsca.

Ostatnia aktualizacja: 30.01.2018 17:21:50 przez peceha
[#22] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #21

Nie znam się na Blitzu, ale myślę, że chodzi o znak liczby.
P.S. Chyba nie mam racji, sorki.

Ostatnia aktualizacja: 30.01.2018 17:31:52 przez Hexmage960
[#23] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #21

Podałem przeca przykład. Skoro *scr jest wskaźnikiem na strukturę Screen to nie dajemy ponownego Peek.w.
[#24] Re: [blitz] pytania ... (i odpowiedzi ?)

@cholok, post #23

Hehe, no tak - dzieki !!! - teraz dziala po wywaleniu "Peek" szeroki uśmiech
[#25] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #24

...
dlatego nadal uważam że Blitz to taki trochę bardziej zaawansowany macro assembler
gdzie wypada wiedzieć co to są wskaźniki. i do czego służą w Blitzu &, ? i *
no offence

i tak przy okazji
fajnie że kolejna osoba wzięłą się za Blitza bo to jesto język dość bliski assemblerowi i mniej abstrakcyjny niż C.
[#26] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #24

jak uzyc polecenia
TextExtent_

??

mam tak:
costam.l=TextExtent_(*win\RPort,"text",4,result.TextExtent)

costam = 248 (zawsze, niewazny tekst)
result\te_Width = -22761 (zmienia sie w zaleznosci od tekstu)

zreszta podobnie kosmiczny wynik mam po uzyciu
TextLength_


Co ja tu zle robie?
[#27] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #26

W deklaracji funkcji TextExtent() jest przedrostek "void", czyli funkcja nic nie zwraca, dlatego costam.l jest zbędne. Ostatni parametr to wskaźnik do struktury TextExtent i tam funkcja zwróci wynik.

Nie wiem jak w Blitzu, ale w C będzie tak:
struct TextExtent te;
TextExtent(win->rport,"text",4,&te);
printf("wynik w pixelach=%d\n",te.te_Width);
[#28] Re: [blitz] pytania ... (i odpowiedzi ?)

@forge, post #27

Dzieki za pomoc.
Blad tu byl po mojej stronie bo od wczoraj zamieniam caly kod tak by pasowal pod systemowe funkcje a nie wbudowane Blitz-a. Przez to sie zgubilem i odowlywalem do nieistniejacej struktury *win - dlatego dostawalem brednie.

Co do samej funkcji to w Blitzu musi byc do czegos przypisana (wlasnie takie "cokolwiek", ktore i tak jest ignorowane a bez tego wywali blad). Wynik jest tak samo w ostatnim parametrze typu TextExtend.

Juz to porpawilem i teraz mam nieco niezgrabny sposob otwarcia okna bo otwieram takie o rozmiarze 1pxl x 1pxl. Gdy juz mam *win to moge wkoncu skorzystac z TextExtend() i po otrzymaniu wynikow obliczam szukane rozmiary okna i je ustawiam na swoim miejscu.
Dobrze ze caosc odbywa sie w ulamku sekundy wiec tego nie widac.
[#29] Re: [blitz] pytania ... (i odpowiedzi ?)

@peceha, post #28

Juz to porpawilem i teraz mam nieco niezgrabny sposob otwarcia okna bo otwieram takie o rozmiarze 1pxl x 1pxl. Gdy juz mam *win to moge wkoncu skorzystac z TextExtend() i po otrzymaniu wynikow obliczam szukane rozmiary okna i je ustawiam na swoim miejscu.
Dobrze ze caosc odbywa sie w ulamku sekundy wiec tego nie widac.

Pobierz RastPort ekranu, na którym otwierasz okno i na jego podstawie wylicz TextExtent().

Poza tym w strukturze ekranu masz pola WBorLeft, WBorTop, WBorRight i WBorBottom, w których wpisane są wymiary ramek okienek, otwieranych na tym ekranie. Może się to przydać.
[#30] Re: [blitz] pytania ... (i odpowiedzi ?)

@Hexmage960, post #29

Dzis rano przygladalem sie strukturze RastPort ale ona niestety zawiera informacje o czcionce ekranowej "screen text" (3ciej na liscie w preferencjach workbencha:FONT) czyli to samo co struktura Screen\Font.

Czcionka jaka jest uzyta przez okno to ta 2ga z listy w preferencjach FONT czyli "system default text" i nie mam pojecia gdzie znalezc o niej informacje.
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