Uruchamianie programu na pełnym ekranie

0

Witam ponownie,
dalej rozwijam swoją aplikację firmowa. Jak już nie raz pisałem pascal mi całkowicie wystarcza. Na prawdę bardzo dużo można w nim zrobić. Do tej pory udało mi się rozwiązać wszystkie problemy, no poza komunikacją z FTP. Większość samemu. W ten sposób się dużo nauczyłem. Ale nie jestem ekspertem. Dlatego moje pytanie może być kompletnie bezsensowne. Chciałbym wiedzieć, czy jest jakaś możliwość by wysłany do innych użytkowników program automatycznie otwierał się w trybie pełnoekranowym? Nie chodzi mi o zmaksymalizowanie okna, tylko o pełny ekran taki jak w większości gier. Tak, żeby nie był widoczny pasek zadań i żeby nie było widać X, zamykającego program. Wyjście z niego ma być możliwe tylko po wybraniu odpowiedniego przycisku.

0

Poczytaj o plikach .pif

0

Pliki które informują Windowsa jak ma uruchamiać programy nie będące Windowsem.

A więc zakładam, że w takim pliku można umieścić informację by Windows otworzył mój program w trybie pełnoekranowym. Dwie kwestie. Czy to poprawny trop? A jeśli tak, to w jaki sposób tą informację umieścić w takim pliku i w ogóle jak go utworzyć?

0

Niestety, nie pomogłeś. A skoro nie chcesz pomagać to nie komentuj, bo to bez sensu. Myślisz, że nie próbowałem czegokolwiek znaleźć? poza tym na forum pisze się bo się chcę pomocy w konkretnym momencie i dotyczącym konkretnego problemu. Można go szybko rozwiązać, ale eksperci zamiast podzielić się swoją wiedzą, wolą odsyłać do googla.

0

Wiedzą się podzieliłem, aby przypomnieć sobie jak to się robiło musiałbym przeczytać kilka z tych artykułów lub grzebać w 50TB bazie swoich źródeł.
W oby przypadkach zajmie to nieznacznie mniej czasu niż tobie.

0

Ale Ty wiedziałbyś czego szukać, ja nigdy nie widziałem pliku .pif. I nie wiem co miałbym z nim zrobić. A zdążyłem trochę poczytać i nadal nie wiele wiem.

1

dalej rozwijam swoją aplikację firmowa. Jak już nie raz pisałem pascal mi całkowicie wystarcza

Czy program działa w konsoli czy w normalnym oknie?

Maksymalizacja konsoli:

asm
  mov ax,168Bh
  mov bx,0
  int 2Fh
end;

Ma szansę zadziałać pod XP i starszych, ale nie pod Windows 7.

0

A jaka jest różnica pomiędzy konsolą a oknem? Skompilowany program w Lazarusie. Otwieram skrót w którym wybrane są opcje maksymalizacji.

Ja i tak mam W8, więc ta propozycja nie pomoże.

0

Masz czarny ekran do którego wypisujesz za pomocą Write/WriteLn ?

0

To wpisuje w lazarusie.

0
lucasp17 napisał(a):

A jaka jest różnica pomiędzy konsolą a oknem?

http://bit.ly/1fxDHH7
Wystarczy sobie przeczytać tytuł pierwszego linka

0

Może i Tobie wystarczy. Ja pisałem nie jestem ekspertem. Znam trochę, podstawy tego języka i po prostu piszę to w Lazarusie później uruchamiam program i tyle. Nie mam pojęcia czym się różni konsola od okna. A tytuł pierwszego linku raczej mi tego nie wyjaśnia. Zresztą chyba nie jest to takie ważne. Pytanie było czy można uruchomić to na pełnym ekranie. Jeśli sie da to proszę o rozwiązanie, jeśli nie to o stosowną informację.

Dodatkowo mam jeszcze jedno pytanie. Czy w Lazarusie da się ustawić, aby program poprawnie wyświetlał i czytał polskie znaki?

1

Podano ci stosowną informacje - użyj plików pif jeżeli to jest konsola.
Nie wiesz co to konsola, ok podano ci stosowną informacje - zależy używasz Write czy nie (na pytanie odpowiedziałeś jakoś pokrętnie)
No więc skoro w tytule opisu WriteLn widzisz - "Console Mode Pascal - Lazarus wiki" - to wydawało mi się że dasz rady pomyśleć, ale niestety ...

Lazarus zawsze poprawnie wyświetla i czyta polskie znaki, inna sprawa że jak mu twierdzisz że ma czytać win1250 zaś podajesz w latin2 to nie ma prawa to zadziałać poprawnie.

0

Zresztą chyba nie jest to takie ważne.

Jest to bardzo ważne, jeśli chodzi o odpowiedź na pytanie: jak zrobić pełny ekran.

Nadal nie wiemy, czy program jest konsolowy, czy okienkowy. Może zrzutkę daj?
...
a jeśli używasz konsoli pod Win8, to o pełnym ekranie możesz zapomnieć.

1

@lucasp17 - program konsolowy wygląda dokładnie tak samo, jak systemowy "Wiersz polecenia" - najczęściej małe okienko z trybem tekstowym - czarne tło i szary tekst, o ile sam kolorystyki nie zmieniłeś (zarówno w programie, jak i w ustawieniach wiersza polecenia);

Jeśli masz program okienkowy, czyli utworzyłeś w Lazarusie nowy projekt aplikacji przez File > New... > Application, to do wyświetlenia okna programu na pełnym ekranie (nad paskiem zadań) musisz ustawić jego szerokość i wysokość na taką, jaka jest rozdzielczość ekranu (nie pulpitu); Zmień także właściwość FormStyle na fsSystemStayOnTop - formularz powinien być nad paskiem zadań, ale nie mam jak sprawdzić, bo właśnie mi Lazarus padł...

0

Ta odpowiedź wszystko wyjaśnia. A więc nie jestem aż tak zaawansowany chyba, by tworzyć programy otwierane w oknie.

A więc skoro się nie da, to trudno. Nie jest to mi aż tak bardzo potrzebne. A co do polskich znaków, niestety ja ich nie mam. Próbowałem zmienić w lazarusie kodowanie, według instrukcji znalezionych w internecie, ale nie wiele to dawało.

0
lucasp17 napisał(a):

Próbowałem zmienić w lazarusie kodowanie, według instrukcji znalezionych w internecie, ale nie wiele to dawało.
Więc znalazłeś niewłaściwe instrukcje lub nieumiejętnie je zastosowałeś.

0

A jakie są te właściwe?

0

A jeszcze pod temat ekranu podchodzi jedna sprawa.
Dziś uruchomiłem po raz pierwszy tryb graficzny. Mam dwa problemy. 1. Czy da się robić w tym trybie płynne animacje, bez takiego "migania". 2. Czy jest możliwość przesunięcie jakiegoś elementu o mniej niż 1 px?

0

Znam trochę, podstawy tego języka i po prostu piszę to w Lazarusie później uruchamiam program i tyle. Nie mam pojęcia czym się różni konsola od okna.

To jest konsola (zrzut z WinXP):

cmd.png

a to okienko (standardowy formularz aplikacji):

form.png

Różnicy chyba nie trzeba tłumaczyć;

  1. Czy da się robić w tym trybie płynne animacje, bez takiego "migania".

Da się, tylko trzeba użyć jakiegoś API, np. OpenGL, DirectX, Allegro itd.;

  1. Czy jest możliwość przesunięcie jakiegoś elementu o mniej niż 1 px?

Nie, piksel to najmniejsza jednostka;

A jeśli chodzi o wcześniej wspomniane przyciski formularza - możesz je wszystkie ukryć, przez ustawienie zbióru BorderIcons na []; Jak nie chcesz wyświetlać systemowej ramki formularza - ustaw właściwość BorderStyle na bsNone; Dzięki temu będziesz miał jednolite tło formularza bez ramek i systemowych przycisków.

0

No tak, co do tego okna i konsoli to już się zorientowałem po Twoim wcześniejszym poście.

Ale w takim razie te animacje i tak nie będą płynne. Chyba, że jeszcze mój tok myślenia nie jest najlepszy.
Ja zrobiłem pętle for w której jest czyszczenie ekranu, później rysowanie linii, takiej jakby górki. I ta górka zawsze jest w tym samym miejscu. Ja chciałbym wstawić np. kropkę, która z tej górki będzie zjeżdżała, ale tu mam problem. Bo nachylenie nie jest taki, że X i Y zmieniają się równomiernie. Można powiedzieć, że np. na każdy 1 px X, Y zmienia się o 1,7 px. A więc w takiej sytuacji nie da się ustawić, żeby ta kropka automatycznie się przesuwała o krótki fragment. Bo będzie pod, albo nad linią. Możliwe będzie dopiero przesunięcie o X,Y 10, 17. A więc płynne w żaden sposób to nie będzie. Da się to jakoś obejść?

Zrozumieliście o co mi chodzi? Sam nie wiem jak mam to wytłumaczyć.

0

Ja zrobiłem pętle for w której jest czyszczenie ekranu [...]

No i właśnie dlatego masz to tajemnicze "miganie ekranu"... Jak chcesz mieć płynną animację to nie kasuj całego ekranu, a tylko to, czego ma niebyć w nowej klatce; Czyszczenie całego ekranu trochę trwa i psuje efekt.

0

To wiem, tym się na razie nie przejmuję. Zrobiłem to z pełną świadomością. Chodzi mi bardziej o to, by ta kropka zjeżdżała płynnie, a nie przeskakiwała o 10,17px. Da się coś takiego osiągnąć?

0

Toż Ci napisałem żebyś kasował jedynie tę kropkę, a nie cały ekran; Jak chcesz animację kropki po pikselu, to w każdej klatce najpierw zamalowuj starą kropkę, następnie inkrementuj lub dekrementuj jej współrzędne o jeden, i na koniec namaluj kropkę w nowych koordynatach;

Tylko gdzieś sobie przechowuj współrzędne tego punktu, żeby nie wpadł Ci do głowy pomysł jej szukania na ekranie...

0

W tym momencie mam coś takiego:

program Grafika1;

uses crt, graph;
var sterownik, tryb:smallint;
     i :integer;   

begin
    detectgraph(sterownik,tryb);
    initgraph(sterownik,tryb,'');
    setcolor(14);
    setfillstyle(hatchfill,4); 

    for i := 0 to 10 do
        begin
            setcolor(14);
            line(100,100,270,200);

            setcolor(9);
            outtextxy(97+(i*17),93+(i*10), '.');
            
            delay(1000);

            setcolor(0);
            outtextxy(97+(i*17),93+(i*10), '.');
        end;

    setcolor(9);
    outtextxy(97+(i*17),93+(i*10), '.');

    closegraph;
end.

Teraz już nie kasuję całego ekranu, ale co zrobić by ta kropka nie przesuwała się aż o taką odległość. Tylko, żeby płynnie przez te 11 sekund zjeżdżała z tej górki?

1
lucasp17 napisał(a):

A jakie są te właściwe?

program LazarusPL;

{$mode objfpc}{$H+}

uses Classes,LazUTF8,Windows;

const test:String='ĄĆĘŁŃÓŚŻŹąćęłńóśżź';
var str:String;
begin
  WriteLn(LazUtf8.UTF8ToConsole('Skopiuj i wklej poniższy tekst'));
  WriteLn(LazUtf8.UTF8ToConsole(test));
  repeat
    ReadLn(str);
    WriteLn(LazUtf8.UTF8ToConsole('Wczytano ')+str+LazUtf8.UTF8ToConsole(' jeżeli poprawnie przepisałeś to program się skończy'));
  until LazUtf8.ConsoleToUTF8(str)=test;
end.
0

Używasz procedury Delay na aż sekundę i dziwisz się, że masz babola, a nie animację... Do tego jeszcze mnożysz iterator pętli przez 17 i 10, a wyniku używasz do określenia nowych współrzędnych... No i ustaw górną granicę licznika pętli na ilość wszystkich klatek, jakie ma mieć animacja oraz zmniejsz ilość milisekund przerwy w każdej iteracji pętli;

Poza tym kropkę rysuj jakąś procedurą graficzną, a nie OutTextXY;

0

Ale właśnie to 17 i 10 jest kluczowe. Ja nie wiem co mam z tym zrobić. W jaki sposób inaczej obliczyć współrzędne do wstawienia tej kropki?

0
_13th_Dragon napisał(a):
lucasp17 napisał(a):

A jakie są te właściwe?

program LazarusPL;

{$mode objfpc}{$H+}

uses Classes,LazUTF8,Windows;

const test:String='ĄĆĘŁŃÓŚŻŹąćęłńóśżź';
var str:String;
begin
  WriteLn(LazUtf8.UTF8ToConsole('Skopiuj i wklej poniższy tekst'));
  WriteLn(LazUtf8.UTF8ToConsole(test));
  repeat
    ReadLn(str);
    WriteLn(LazUtf8.UTF8ToConsole('Wczytano ')+str+LazUtf8.UTF8ToConsole(' jeżeli poprawnie przepisałeś to program się skończy'));
  until LazUtf8.ConsoleToUTF8(str)=test;
end.

test.lpr(5,15) Fatal: Can not find unit LazUTF8 used by LazarusPL. Check if package LazUtils is in the dependencies.

1 użytkowników online, w tym zalogowanych: 0, gości: 1