Forum AmigaOne Zone

Forum użytkowników Amigi i nie tylko
Teraz jest czwartek, 28 mar 2024, 10:03

Strefa czasowa: UTC + 1




Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 48 ]  Przejdź na stronę 1, 2, 3, 4  Następna strona
Autor Wiadomość
PostNapisane: piątek, 20 sty 2017, 11:23 
Offline
Administrator
Administrator

Dołączył(a): poniedziałek, 16 sty 2012, 13:40
Posty: 230
Lokalizacja: okolice Lublina
Z racji, że programista ze mnie żaden - na studiach miałem turbo pascala przez 2 semestry, a C to tylko z książek i sieci się 'uczyłem'; więc zakładam wątek w którym będę zadawał może dziwne, może lamerskie pytania.

Napisałem sobie programik, który otwiera mi okno i teraz chciałbym aby w tym oknie wyświetlał mi się tekst - do tej pory jak odpalałem program to komunikacja z programem odbywała się w shell'u. Jak zrobić aby komendą printf tekst szedł na otwarte okno, a nie do shella.
Może jakiś prosty przykład ktoś by napisał, abym to załapał.

_________________
AmigaONE X5000/20


Udostępnij dla FacebookUdostępnij dla Twitter
Góra
 Zobacz profil  
Cytuj  
PostNapisane: piątek, 20 sty 2017, 14:29 
Offline
Elitarny forumowicz
Elitarny forumowicz
Avatar użytkownika

Dołączył(a): piątek, 20 sty 2012, 05:09
Posty: 561
Lokalizacja: Warszawa
Funkcje printf(), fprintf() z biblioteki standardowej C nie wyświetlą Ci tekstu w utworzonej przez Ciebie własnej konsoli. Musisz skorzystać z funkcji VFPrintf() z biblioteki dos.library.

Ale po kolei. Żeby okienko działało jako konsola musisz otworzyć je na jeden z dwóch sposobów:
  • za pomocą dos.library podając za nazwę "CON:0/0/xxx/yyy/Konsola/CLOSE", gdzie xxx to szerokość, a yyy to wysokość okienka z konsolą. Po otwarciu pliku pod tą nazwą otrzymasz deskryptor pliku, który możesz podawać za argument do funkcji VFPrintf() i innych funkcji operujących na plikach z dos.library.
  • za pomocą console.device. Tutaj możesz przypisać dowolne już otwarte okienko do roli konsoli, ale komunikacja odbywa się poprzez console.device i polecenia CMD_READ i CMD_WRITE.

Mógłbyś wywołać też polecenie systemowe NewShell, ale wówczas nie będziesz miał kontroli nad przepływem informacji. Jeśli coś jest niejasnego śmiało pytaj.

_________________
Robert "Hextreme" Szacki - Gear Works software


Góra
 Zobacz profil  
Cytuj  
PostNapisane: piątek, 20 sty 2017, 23:46 
Offline
Administrator
Administrator

Dołączył(a): poniedziałek, 16 sty 2012, 13:40
Posty: 230
Lokalizacja: okolice Lublina
Generalnie nic z tego nie jest jasne. Tak jak pisałem - programista ze mnie taki jak z mysiej .... bęben.

Załącznik:
okno.png


Chciałbym aby 'Testowy napis.' wyświetlił się w Testowym oknie. Jeżeli to co napisałeś odnosi się właśnie to tego co chcę uzyskać to super - masz może gdzieś jakiś prosty przykład (taki dla zielonych) jak to powinno wyglądać.

Czym się różnią te dwa sposoby między sobą?


Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.

_________________
AmigaONE X5000/20


Góra
 Zobacz profil  
Cytuj  
PostNapisane: sobota, 21 sty 2017, 00:17 
Offline
Elitarny forumowicz
Elitarny forumowicz
Avatar użytkownika

Dołączył(a): piątek, 20 sty 2012, 05:09
Posty: 561
Lokalizacja: Warszawa
tchomasz napisał(a):
Generalnie nic z tego nie jest jasne. Tak jak pisałem - programista ze mnie taki jak z mysiej .... bęben.

Chciałbym aby 'Testowy napis.' wyświetlił się w Testowym oknie. Jeżeli to co napisałeś odnosi się właśnie to tego co chcę uzyskać to super - masz może gdzieś jakiś prosty przykład (taki dla zielonych) jak to powinno wyglądać.

Czym się różnią te dwa sposoby między sobą?

Proszę bardzo. Przykład skorzystania z pierwszego (prostszego) sposobu, czyli dos.library i urządzenia CON:.

Sprawdziłem, działa.

Kod:
#include <stdio.h>
#include <dos/dos.h>
#include <clib/dos_protos.h>

int main( void )
{
   BPTR con;

   /* Otwieramy okno z konsolą */
   if( con = Open( "CON:0/0/640/200/Konsola/CLOSE", MODE_NEWFILE ) )
   {
      /* Wyświetlamy testowy napis */
      VFPrintf( con, "Testowy napis.\n", NULL );
      
      /* Czekamy na naciśnięcie klawisza pięć sekund */
      WaitForChar( con, 5*1000000 );

      /* Zamykamy konsolę */
      Close( con );

      /* Kończymy program (powodzenie) */
      return( RETURN_OK );
   }
   else   
      /* Bład otwierania konsoli */
      printf( "Nie mogę otworzyć konsoli.\n" );
   /* Kończymy program (błąd) */
   return( RETURN_FAIL );
}

_________________
Robert "Hextreme" Szacki - Gear Works software


Góra
 Zobacz profil  
Cytuj  
PostNapisane: sobota, 21 sty 2017, 01:00 
Offline
Administrator
Administrator

Dołączył(a): poniedziałek, 16 sty 2012, 13:40
Posty: 230
Lokalizacja: okolice Lublina
Czy do tak otwartego okna mogę przypisać menu? Chodzi o to, że kurs C z którego korzystam to ten z MA. Napisałem sobie programik, który otwiera mi okno do tego jest menu i nie wiem czy teraz muszę go przerabiać aby okno otwierało się tym sposobem co podałeś, czy w moim przypadku trzeba to zrobić za pomocą console.device.

_________________
AmigaONE X5000/20


Góra
 Zobacz profil  
Cytuj  
PostNapisane: sobota, 21 sty 2017, 08:20 
Offline
Elitarny forumowicz
Elitarny forumowicz
Avatar użytkownika

Dołączył(a): piątek, 20 sty 2012, 05:09
Posty: 561
Lokalizacja: Warszawa
tchomasz napisał(a):
Czy do tak otwartego okna mogę przypisać menu? Chodzi o to, że kurs C z którego korzystam to ten z MA. Napisałem sobie programik, który otwiera mi okno do tego jest menu i nie wiem czy teraz muszę go przerabiać aby okno otwierało się tym sposobem co podałeś, czy w moim przypadku trzeba to zrobić za pomocą console.device.

W takim przypadku zgadza się - trzeba skorzystać z console.device. Okienko CON: jest otwierane i obsługiwane przez system i raczej nie ma możliwości dostania się do niego.

Poniżej przedstawiam przykład skorzystania z console.device. Sprawdziłem, działa.

Co do menu chyba nie powinieneś mieć problemu z załączeniem menu do okienka tak otwartego.

Pytanie: co Twój program ma robić? Czy to tylko ćwiczenie? Czy na pewno chcesz by okienko pełniło rolę konsoli?

Kod:
#include <stdio.h>
#include <string.h>
#include <devices/console.h>
#include <devices/conunit.h>
#include <intuition/intuition.h>
#include <dos/dos.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>

/* Rozmiar bufora */
#define ROZMIAR_BUFORA 25

/* Deklaracja funkcji */
int test( struct Window *win, struct IOStdReq *io );

/* Program główny */
int main( void )
{
   struct MsgPort *mp;
   struct Window *win;
   struct IOStdReq *io;

   int returnCode = RETURN_FAIL;

   /* Tworzymy port komunikacyjny */
   if( mp = CreateMsgPort() )
   {
      /* Tworzymy strukturę IOStdReq */
      if( io = ( struct IOStdReq * ) CreateIORequest( mp, sizeof( struct IOStdReq ) ) )      
      {
         /* Otwieramy własne okienko */
         if( win = OpenWindowTags( NULL,
            WA_Left,   0,
            WA_Top,      0,
            WA_Width,   640,
            WA_Height,   200,
            WA_Title,   "Okno konsoli",
            WA_CloseGadget,   TRUE,
            WA_DepthGadget,   TRUE,
            WA_DragBar,   TRUE,
            WA_SimpleRefresh,   TRUE,
            WA_Activate,   TRUE,
            WA_IDCMP,   IDCMP_CLOSEWINDOW,
            TAG_DONE ) )
         {
            /* Wstawiamy adres struktury okienka do struktury IOStdReq */
            io->io_Data = ( APTR ) win;
            io->io_Length = sizeof( struct Window );

            /* Otwieramy console.device (z mapą znaków i usługą Cut-and-Paste) */
            if( OpenDevice( "console.device", CONU_SNIPMAP, ( struct IORequest * ) io, CONFLAG_DEFAULT ) == 0 )
            {
               /* Wywołujemy funkcję testującą */         
               returnCode = test( win, io );

               /* Zamykamy console.device */
               if( CheckIO( ( struct IORequest * ) io ) == NULL )
                  AbortIO( ( struct IORequest * ) io );
               WaitIO( ( struct IORequest * ) io );
               CloseDevice( ( struct IORequest * ) io );               
            }
            /* Zamykamy okienko */
            CloseWindow( win );            
         }
         /* Zwalniamy strukturę IOStdReq */
         DeleteIORequest( ( struct IORequest * ) io );   
      }
      /* Zwalniamy port */
      DeleteMsgPort( mp );
   }
   /* Zwracamy wynik */
   return( returnCode );
}

/* Nasza funkcja testująca konsolę */
int test( struct Window *win, struct IOStdReq *io )
{
   UBYTE *napis = "Testowy napis.\n";
   UBYTE bufor[ ROZMIAR_BUFORA ];
   ULONG con_sig, win_sig, signal;

   /* Wypisujemy w konsoli napis */
   io->io_Data = napis;
   io->io_Length = strlen( napis );
   io->io_Command = CMD_WRITE;
   DoIO( ( struct IORequest * ) io );

   /* Wysyłamy polecenie czytania z konsoli */
   io->io_Data = ( APTR ) bufor;
   io->io_Length = ROZMIAR_BUFORA;
   io->io_Command = CMD_READ;
   SendIO( ( struct IORequest * ) io );

   /* Maska sygnałowa console.device */
   con_sig = 1L << io->io_Message.mn_ReplyPort->mp_SigBit;

   /* Maska sygnałowa portu okienka */
   win_sig = 1L << win->UserPort->mp_SigBit;

   /* Czekamy na naciśnięcie klawisza lub zamknięcie okienka */
   signal = Wait( con_sig | win_sig );

   /* W przypadku sygnału zamknięcia okienka */
   if( signal & win_sig )
   {   
      /* Czyścimy bufor wiadomości z okienka */
      struct Message *msg;
      while( msg = GetMsg( win->UserPort ) )
         ReplyMsg( msg );
   }      

   /* Wracamy z funkcji */
   return( RETURN_OK );
}

_________________
Robert "Hextreme" Szacki - Gear Works software


Góra
 Zobacz profil  
Cytuj  
PostNapisane: sobota, 21 sty 2017, 13:25 
Offline
Doborowy forumowicz
Doborowy forumowicz

Dołączył(a): wtorek, 17 sty 2012, 17:21
Posty: 934
Właśnie - co chcesz zrobić?
Narysować coś w okienku, zrobić jakieś proste gui ?


Góra
 Zobacz profil  
Cytuj  
PostNapisane: sobota, 21 sty 2017, 18:45 
Offline
Administrator
Administrator

Dołączył(a): poniedziałek, 16 sty 2012, 13:40
Posty: 230
Lokalizacja: okolice Lublina
Rysować w okienku na razie nie chcę. Generalnie na chwilę obecną to takie ćwiczenia - niby mam jakiś tam pomysł na programik, ale to na razie luźna koncepcja. Na chwilę obecną to za cienki jestem :)

_________________
AmigaONE X5000/20


Góra
 Zobacz profil  
Cytuj  
PostNapisane: sobota, 21 sty 2017, 20:50 
Offline
Elitarny forumowicz
Elitarny forumowicz
Avatar użytkownika

Dołączył(a): piątek, 20 sty 2012, 05:09
Posty: 561
Lokalizacja: Warszawa
tchomasz napisał(a):
Rysować w okienku na razie nie chcę. Generalnie na chwilę obecną to takie ćwiczenia - niby mam jakiś tam pomysł na programik, ale to na razie luźna koncepcja. Na chwilę obecną to za cienki jestem :)

Spoko. Po pierwsze forum jest po to by sobie pomagać.

A po drugie trening czyni mistrza! ;) Zatem dużo ćwicz. Takie niby proste przymiarki mogą być wstępem do czegoś większego.

Polecam nabyć Amiga Developer CD v2.1. Bardzo się przydaje.

_________________
Robert "Hextreme" Szacki - Gear Works software


Góra
 Zobacz profil  
Cytuj  
PostNapisane: sobota, 21 sty 2017, 21:46 
Offline
Administrator
Administrator

Dołączył(a): poniedziałek, 16 sty 2012, 13:40
Posty: 230
Lokalizacja: okolice Lublina
Mam tą płytkę, ale mój angielski ...... - szkoda pisać, za stary już jestem na takie rzeczy jak angielski ;)

_________________
AmigaONE X5000/20


Góra
 Zobacz profil  
Cytuj  
PostNapisane: niedziela, 22 sty 2017, 15:37 
Offline
Administrator
Administrator

Dołączył(a): poniedziałek, 16 sty 2012, 13:40
Posty: 230
Lokalizacja: okolice Lublina
Hextreme napisał(a):

Poniżej przedstawiam przykład skorzystania z console.device. Sprawdziłem, działa.



Tak działa. W wolnej chwili poobaczajam przerabiając sobie przykład. Poniżej załączam moje wypociny - mile widziane wszelkie uwagi.
Kod:

#include <intuition/intuition.h>

#include <proto/dos.h>
#include <proto/intuition.h>
#include <proto/exec.h>
#include <proto/gadtools.h>
#include <proto/asl.h>

#include <stdio.h>

static int init(void);
static void loop(void);
static void close(void);

static void ShowAbout(void);
static void FileRead(void);

struct IntuitionBase *IntuitionBase;
struct Library *GadToolsBase;
struct Library *AslBase;
struct Window *window;
struct IntuiMessage *msg;
struct Menu *menu;
struct Screen *pubscr;
void *vi;

char koniec;

struct TagItem taglist[]=
{
   WA_Left,    0,
   WA_Top,      0,
   WA_Width,   250,
   WA_Height,   180,
   WA_MaxWidth,   -1,
   WA_MaxHeight,   -1,
   WA_Title,   (ULONG)"Testowe okno",
   WA_DragBar,   TRUE,
   WA_CloseGadget,   TRUE,
   WA_Activate,   TRUE,
   WA_DepthGadget,   TRUE,
   WA_SizeGadget,   TRUE,
   WA_NewLookMenus,TRUE,
   WA_IDCMP,   IDCMP_CLOSEWINDOW | IDCMP_MENUPICK,
   TAG_END
};

struct TagItem frtag[]=
{
   ASL_Hail,   (ULONG)"Wybierz plik",
   ASL_LeftEdge,   0,
   ASL_TopEdge,   0,
   ASL_Width,   100,
   ASL_Height,   150,
   ASL_OKText,   (ULONG)"Wczytaj",
   ASL_CancelText,   (ULONG)"Poniechaj",
   ASL_File,   (ULONG)"costam.bin",
   ASL_Dir,   (ULONG)"libs:",
   TAG_DONE
};

struct EasyStruct AboutWindow =
{
   sizeof(struct EasyStruct),
   0,
   "About .....",
   "Takie tam pierwsze wypociny.\n",
   "OK",
};

//Menu programu.

struct NewMenu tabnm[]=
{
   {NM_TITLE,   "File"},
   {NM_ITEM,   "Open", "O"},
   {NM_ITEM,   NM_BARLABEL},
   {NM_ITEM,   "Save", "S"},
   {NM_ITEM,   "Save as", "Z"},
   {NM_ITEM,   NM_BARLABEL},
   {NM_ITEM,   "Exit", "Q"},
   {NM_TITLE,   "Menu1"},
   {NM_ITEM,   "Podmenu0"},
   {NM_ITEM,   "Podmenu1..."},
   {NM_ITEM,   NM_BARLABEL},
   {NM_ITEM,   "Podmenu2"},
   {NM_ITEM,   "Podmenu3"},
   {NM_TITLE,   "Menu2"},
   {NM_ITEM,   "Podmenu0"},
   {NM_ITEM,   "Podmenu1"},
   {NM_ITEM,   "Podmenu2"},
   {NM_TITLE,   "Menu3"},
   {NM_ITEM,   "Podmenu1", 0, CHECKIT | MENUTOGGLE},
   {NM_ITEM,   "Podmenu2", 0, CHECKIT | MENUTOGGLE},
   {NM_ITEM,   "Podmenu3", 0, CHECKIT | CHECKED | MENUTOGGLE},
   {NM_ITEM,   "Podmenu4", 0, CHECKIT},
   {NM_SUB,   "Podpodmenu1", 0, CHECKIT, 2|4},
   {NM_SUB,   "Podpodmenu2", 0, CHECKIT | CHECKED, 1|4},
   {NM_SUB,   "Podpodmenu3", 0, CHECKIT, 1|2},
   {NM_TITLE,   "Help"},
   {NM_ITEM,   "About...", "?"},
   {NM_ITEM,   "Podmenu1..."},
   NM_END   
};


int main(void)
{
    if(0 == init())
    {
   loop();
    }
    close();
    return 0;
}

static int init(void)
{
    IntuitionBase=(struct IntuitionBase*) OpenLibrary("intuition.library", 40L);
    if (!IntuitionBase)
    {
   return -1;
    }
    GadToolsBase=OpenLibrary("gadtools.library", 40L);
    if (!GadToolsBase)
    {
   return -1;
    }
    AslBase=OpenLibrary("asl.library", 40L);
    if (!AslBase)
    {
   return -1;
    }
    menu=CreateMenusA(tabnm, 0);
    if (!menu)
    {
   return -1;
    }
    pubscr=LockPubScreen(0);
    if (!pubscr)
    {
   return -1;
    }
    vi=GetVisualInfoA(pubscr, 0);
    if (!vi)
    {
   return -1;
    }
    LayoutMenus(menu, vi, GTMN_NewLookMenus, TRUE, TAG_DONE);
    window=OpenWindowTagList(0, taglist);
    if (!window)
    {
   return -1;
    }
    SetMenuStrip(window, menu);
    return 0;
}

static void loop(void)
    {   
   for (koniec=0; !koniec;)
   {
       WaitPort(window->UserPort);
       if (msg=(struct IntuiMessage*) GetMsg(window->UserPort))
       {
      ULONG Clas=msg->Class;
      UWORD Code=msg->Code;
      ReplyMsg((struct Message*)msg);
      switch (Clas)
      {
          case IDCMP_CLOSEWINDOW:
         koniec = 1;
         break;

          case IDCMP_MENUPICK:
         while (Code!=MENUNULL)
         {
             struct MenuItem *item=ItemAddress(menu, Code);
             if (Code==FULLMENUNUM(0, 0, NOSUB))
            FileRead();
             if (Code==FULLMENUNUM(0, 5, NOSUB))
            koniec = 1;
             if (Code==FULLMENUNUM(4, 0, NOSUB))
            ShowAbout();
             Code=item->NextSelect;
         }
      }
       }
   }
    }

static void close(void)
{
    if (window)
    {
   ClearMenuStrip(window);
   CloseWindow(window);
    }
    if (vi)
    {
   FreeVisualInfo(vi);
    }
    if (pubscr)
    {
   UnlockPubScreen(0, pubscr);
    }
    if (menu)
    {
   FreeMenus(menu);
    }
    if (AslBase)
    {
   CloseLibrary(AslBase);
    }
    if (GadToolsBase)
    {
   CloseLibrary(GadToolsBase);
    }
    if (IntuitionBase)
    {
   CloseLibrary((struct Library*)IntuitionBase);
    }
}

static void ShowAbout(void)
{
    EasyRequest(window, &AboutWindow, NULL, NULL);
}

static void FileRead(void)
{
    struct FileRequester *fr;

    if (fr = (struct FileRequester *) AllocAslRequest(ASL_FileRequest, frtag));
    {
   if (AslRequest(fr, NULL))
   {
       printf("OK.\n");
   }
    }
    FreeAslRequest(fr);
}

_________________
AmigaONE X5000/20


Góra
 Zobacz profil  
Cytuj  
PostNapisane: poniedziałek, 23 sty 2017, 01:38 
Offline
Administrator
Administrator

Dołączył(a): poniedziałek, 16 sty 2012, 13:40
Posty: 230
Lokalizacja: okolice Lublina
Czy są jakieś zmienne, w których przechowywana jest aktualna rozdzielczość ekranu - chciałbym uzależnić parametry mojego okna od rozdzielczości.

_________________
AmigaONE X5000/20


Góra
 Zobacz profil  
Cytuj  
PostNapisane: poniedziałek, 23 sty 2017, 07:46 
Offline
Elitarny forumowicz
Elitarny forumowicz
Avatar użytkownika

Dołączył(a): piątek, 20 sty 2012, 05:09
Posty: 561
Lokalizacja: Warszawa
tchomasz napisał(a):
Czy są jakieś zmienne, w których przechowywana jest aktualna rozdzielczość ekranu - chciałbym uzależnić parametry mojego okna od rozdzielczości.

Tak, w strukturze Screen ekranu, na którym otwierasz okno. Ponieważ otwierasz swoje okno na ekranie Workbencha, w systemie od wersji 2 pobierasz adres tej struktury poleceniem pubs = LockPubScreen(NULL). Parametrem jest nazwa ekranu publicznego lub NULL, gdy chcemy domyślny. Pamiętaj o zwolnieniu tej struktury na końcu poleceniem UnlockPubScreen(NULL, pubs).

Po pobraniu struktury patrzysz do składowych pubs->Width i pubs->Height, gdzie znajdują się rozmiary ekranu.

Co do opublikowanego przez Ciebie kodu to nie mam żadnych zastrzeżeń.

Tak trzymaj. :thumbup:

Jeśli zaś chodzi o ten napis, który chcesz wyświetlić w okienku. Oprócz konsoli można wykorzystać inne sposoby na wyświetlenie napisu (a nawet pobieranie go):
  • za pomocą struktury IntuiText i polecenia PrintIText().
  • za pomocą gadżetu typu TEXT_KIND z biblioteki gadtools. Służy do wyświetlenia tekstu, a później do dowolnego go zmieniania przez programistę.
  • za pomocą gadżetu typu STRING_KIND. Tutaj użytkownik może zmienić zawartość tego ciągu tekstowego.

Nie ograniczasz wówczas okienka do roli konsoli i możesz dodawać inne rzeczy do niego.

_________________
Robert "Hextreme" Szacki - Gear Works software


Góra
 Zobacz profil  
Cytuj  
PostNapisane: poniedziałek, 23 sty 2017, 16:17 
Offline
Administrator
Administrator

Dołączył(a): poniedziałek, 16 sty 2012, 13:40
Posty: 230
Lokalizacja: okolice Lublina
Hextreme napisał(a):

Po pobraniu struktury patrzysz do składowych pubs->Width i pubs->Height, gdzie znajdują się rozmiary ekranu.



Pobrałem sobie aktualną rozdzielczość, ale nie wiem jak przerobić aby mi to poprawnie działało. Nie przeklejałem całego kodu, żeby mocnego tasiemca nie robić, tylko fragmenty gdzie coś dopisałem lub poprawiałem. Błąd przy kompilacji mi wywala.

Kod:
....
struct Screen *pubscr;
void *vi;

char koniec;
int WindowWidth, WindowHeight; //Dopisane

struct TagItem taglist[]=
{
   WA_Left,    0,
   WA_Top,      0,
   WA_Width,   WindowWidth,    //Edytowane
   WA_Height,   WindowHeight,  //Edytowane
   WA_MaxWidth,   -1,
   WA_MaxHeight,   -1,
....


Kod:
....
    pubscr=LockPubScreen(0);
    if (!pubscr)
    {
   return -1;
    }
   WindowWidth=pubscr->Width-200;      //Dopisane
   WindowHeight=pubscr->Height-100;    //Dopisane
   vi=GetVisualInfoA(pubscr, 0);
    if (!vi)
....

_________________
AmigaONE X5000/20


Góra
 Zobacz profil  
Cytuj  
PostNapisane: poniedziałek, 23 sty 2017, 19:10 
Offline
Elitarny forumowicz
Elitarny forumowicz
Avatar użytkownika

Dołączył(a): piątek, 20 sty 2012, 05:09
Posty: 561
Lokalizacja: Warszawa
Błąd jest tutaj:

Kod:
   WA_Width,   WindowWidth,    //Edytowane
   WA_Height,   WindowHeight,  //Edytowane

Ponieważ WindowWidth i WindowsHeight to zmienne, więc nie można ich w ten sposób przypisać na etapie kompilacji (nie mają jeszcze żadnej wartości).
Musisz ręcznie po ustaleniu wartości tych zmiennych wpisać je do odpowiednich pól w liście tagów.

Polecam skorzystanie z funkcji FindTagItem() w bibliotece utility.library.

Kod:
/* Ustalenie wartości zmiennych */
   WindowWidth=pubscr->Width-200;      //Dopisane
   WindowHeight=pubscr->Height-100;    //Dopisane

/* Wpisanie tych wartości do odpowiednich pól w liście tagów */
struct TagItem *tag;
if (tag = FindTagItem(WA_Width, taglist)) tag->ti_Data = WindowWidth;
if (tag = FindTagItem(WA_Height, taglist)) tag->ti_Data = WindowHeight;

_________________
Robert "Hextreme" Szacki - Gear Works software


Góra
 Zobacz profil  
Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 48 ]  Przejdź na stronę 1, 2, 3, 4  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Powered by phpBB® Forum Software © phpBB Group
Przyjazne użytkownikom polskie wsparcie phpBB3 - phpBB3.PL
phpBB SEO