Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

freebasic grundlagen (vor allem librarys)

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
code



Anmeldungsdatum: 19.01.2005
Beiträge: 154

BeitragVerfasst am: 08.04.2005, 15:43    Titel: freebasic grundlagen (vor allem librarys) Antworten mit Zitat

so hab nun auch mit freebasic angefangen, aber ich kapiers noch nicht ganz.
ich wollte einfach ein windows-fenster mit den massen 800*600 machen.
also hab ich (wurde im forum auch schon besprochen) folgenden code geschrieben:
cls
Code:
screen 800,600,32,0

aber da kamm trotzdem nur eine normal dosbox.

so und weiter hab ich noch die frage ob ich jede .dll in freebasic einbinden kann, also auch winsock etc. ?
und wenn ich die funktionsnamen in den bibliotheken nicht weiß, kann ich dann auch irgendwie anzeigen lassen, welche funktionen in der dll vorhanden sind?

und was ist der unterschied zwischen .bi und .dll?
also ich glaub mal (weiß aber nicht ob das richtig ist):
.bi muss mit include eingefügt werden und enthält die deklarationen der
funktionen. aber muss ich .dll nicht einfügen, sondern wird die dann automatisch eingebunden?

ich hoffe ihr könnt mir helfen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
helpy



Anmeldungsdatum: 22.03.2005
Beiträge: 17

BeitragVerfasst am: 08.04.2005, 15:47    Titel: Antworten mit Zitat

Hier die Beschreibung aus fb 0.12b:
Code:
+--------+--------------------------------------------------------------------
| SCREEN |
+--------+

Statement to set current gfx mode.


Syntax:
   SCREEN mode[,[depth][,[num_pages][,flags]]]


Argument:   Description:

mode      Gfx mode number, see below.

depth      Color depth in bits per pixel. If you omit this argument, the
      default depth for given mode is set.

num_pages   Number of pages, see below. Default if omitted is 1.

flags      Mode options, see below. Default if omitted is 0.


Insights:

The SCREEN statement sets the current gfx mode. Available modes list follows:

Mode 1: 320x200 in CGA emulation.
   40x25 text format, 8x8 character size.
   16 background colors and one of four sets of foreground colors set by
   the COLOR statement.
Mode 2: 640x200 in CGA emulation.
   80x25 text format, 8x8 character size.
   16 colors assigned to any of 2 attributes.
Mode 7: 320x200 in EGA emulation.
   40x25 text format, 8x8 character size.
   16 colors assigned to any of 16 attributes.
Mode 8: 640x200
   80x25 text format, 8x8 character size.
   16 colors assigned to any of 16 attributes.
Mode 9: 640x350
   80x25 or 80x43 text format, 8x14 or 8x8 character size.
   64 colors assigned to any of 16 attributes.
Mode 11: 640x480
   80x30 or 80x60 text format, 8x16 or 8x8 character size.
   Assignment of up to 256K colors to any of 2 attributes.
Mode 12: 640x480
   80x30 or 80x60 text format, 8x16 or 8x8 character size.
   Assignment of up to 256K colors to any of 16 attributes.
Mode 13: 320x200
   40x25 text format, 8x8 character size.
   Assignment of up to 256K colors to any of 256 attributes.
Mode 14: 320x240
   40x30 text format, 8x8 character size.
   Assignment of up to 256K colors to any of 256 attributes.
Mode 15: 400x300
   50x37 text format, 8x8 character size.
   Assignment of up to 256K colors to any of 256 attributes.
Mode 16: 512x384
   64x24 or 64x48 text format, 8x16 or 8x8 character size.
   Assignment of up to 256K colors to any of 256 attributes.
Mode 17: 640x400
   80x25 or 80x50 text format, 8x16 or 8x8 character size.
   Assignment of up to 256K colors to any of 256 attributes.
Mode 18: 640x480
   80x30 or 80x60 text format, 8x16 or 8x8 character size.
   Assignment of up to 256K colors to any of 256 attributes.
Mode 19: 800x600
   100x37 or 80x75 text format, 8x16 or 8x8 character size.
   Assignment of up to 256K colors to any of 256 attributes.
Mode 20: 1024x768
   128x48 or 128x96 text format, 8x16 or 8x8 character size.
   Assignment of up to 256K colors to any of 256 attributes.
Mode 21: 1280x1024
   160x64 or 160x128 text format, 8x16 or 8x8 character size.
   Assignment of up to 256K colors to any of 256 attributes.

For modes 14 and up, the depth parameter changes the color depth to the
specified new one; if depth is not specified, these modes run in 8bpp. For
modes 13 and below, depth has no effect. If you need custom resolutions,
have a look at the SCREENRES statement.
The num_pages parameter specifies the number of "pages" supported by the
video mode: a page is either the visible screen or an offscreen buffer the
same size of the screen. You can show a page while working on another one;
see the SCREENSET statement for details. You can request any number of pages
for any video mode; if you omit num_pages, only the visible page (number 0)
will be available.
The flags parameter can be an OR combination of the following values:

Value:      Option description:
&h1      Request fullscreen mode
&h2      Request OpenGL mode
&h10      Request stencil buffer for when in OpenGL mode
&h20      Request accumulation buffer for when in OpenGL mode

Depending on if the fullscreen flag is set or not, SCREEN will try to set
the specified video mode in fullscreen or windowed mode, respectively. Note
that the system may not be able to fulfill this request, fallbacking on a
working alternative.
If the OpenGL flag is set, gfxlib will enter OpenGL mode: all primitives
drawing functions will have no effect and the screen will not be automatically
updated for you. Basically in OpenGL mode you're just left alone with a
working OpenGL window, and your OpenGL code should handle all rendering. When
a frame is ready, you can request a page flip using the FLIP command, which
has this special behaviour while in OpenGL mode.
The stencil buffer flag has effect only when in OpenGL mode, and if set it
requests the OpenGL context to have a stencil buffer.
Similarly, the accumulation flag also only works when an OpenGL mode has been
requested, and requests an accumulation buffer for it.
Gfxlib will try its best to fulfill your gfx mode requests, but if everything
fails no mode will be set and execution will resume from the statement next
to the SCREEN call. So you should take particular care about checking if
SCREEN is successful; a way to do this is to test the return value of the
SCREENPTR function, have a look at it for details. Another way is just to
check for errors with ON ERROR; SCREEN will cause an illegal function call
error on failure.
Once a gfx mode has been set, you can toggle fullscreen and windowed mode at
any time by pressing ALT-ENTER, providing the system supports it. While in
windowed mode, clicking on the window close button will return CHR$(255)+"X"
to INKEY$, while clicking on the maximize window button will switch to
fullscreen mode if possible.
The system mouse cursor is displayed by default; you can hide it at any time
using the SETMOUSE statement.
A successful SCREEN call sets currently visible and working pages both to page
number 0, resets the palette to the specified mode one (see appendix B),
resets the clipping region to the size of the screen, disables custom
coordinates mappings, moves the gfx cursor to the center of the screen, moves
the text cursor to the top-left corner of the screen and sets foreground and
background colors to bright white and black respectively.


Example:

' Sets fullscreen 640x480 with 32bpp color depth and 4 pages
SCREEN 18, 32, 4, 1
IF NOT SCREENPTR THEN
   PRINT "Error setting video mode!"
   END
END IF


Differences from QB:

Parameters differ, FB version allows additional modes and color depths, and
any number of pages in any mode.


See also:

SCREENRES, SCREENLOCK, SCREENUNLOCK, SCREENPTR, SCREENSET, SCREENCOPY,
SCREENINFO, SETMOUSE, PALETTE.


Du findest die Datei "gfxlib.txt" im Unter-Ordner "docs" im FreeBasic-Ordner

cu, helpy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
code



Anmeldungsdatum: 19.01.2005
Beiträge: 154

BeitragVerfasst am: 08.04.2005, 16:01    Titel: Antworten mit Zitat

danke für die antwort, aber ich noch immer nicht richtig verstanden, was es mit dem librarys auf sich hat. wenn ich jetzt meine festplatte durchwühl nach einer dll beispielsweise eine von icq, kann ich die dann auch einbinden? aber dafür gibts ja gar keine .bi datei?
und für den sreen befehl brauch ich also eine externe bibliothek, und die muss ich natürlich ein binden, oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 08.04.2005, 16:38    Titel: Antworten mit Zitat

So, also:

1. Die Syntax: screen 800,600,32,0 ist eine alte. In den neuen FreeBASIC-Versionen gibts wie in QB auch die Screens 0,..,13 - und das wird dann fortgesetzt.
Screen 20 ist also z.B. 1024x768 Pixel, 256 Farben usw.
Du hast also eine alte Information benutzt.

2. SCREEN musst du, da es ein "spracheigener" Befehl ist, nicht einzubinden. Die GFXlib (von lillo), die für alle graphischen Sachen in FB verantwortlich ist, wird also automatisch eingebunden.

3. DLL = die Bibliothek. BI = die Deklarationen für z.B. SUBs und Functions. (Erleichtert die Arbeit, da du sie dann nicht von Hand in dein Programm schreiben musst)

Grüßle,
Mecki

PS: Bald gibts auch die deutsche Übersetzung der Befehlsreferenz.
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de


Zuletzt bearbeitet von Mecki am 08.04.2005, 16:41, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
helpy



Anmeldungsdatum: 22.03.2005
Beiträge: 17

BeitragVerfasst am: 08.04.2005, 16:40    Titel: Antworten mit Zitat

Hallo code,

Den screen Befehl kannst Du einfach so verwenden, ohne irgendetwas einzustellen! Die benötigten Bibliotheken werden automatisch mit eingebunden.

Beispiel:
Code:

screen 19  ' Öffnet ein Grafik-Fenster mit der Größe 800*600
          ' Siehe Dokumentation des SCREEN Befehls (gfxlib.txt)
Print "Mein erstes Fenster!"
sleep


Die Bibliothekn werden bei den FB-Grafikbefehlen automatisch eingebunden. Nur wenn Du andere Befehle verwenden möchtest, wie z.B. die MessageBox der Windows-API. Dann musst Du auch eine entsprechene *.bi Datei inkludieren. Diese *.bi Datei ist aber bereits in FreeBasic enthalten (siehe im Verzeichnis inc Deiner FreeBasic Installation).

Der MessageBox-Befehl wird dann z.B. so verwendet:
Code:
#include "win\user32.bi"

MessageBox Null, "Text der MessageBox", "Titel der MessageBox", MB_ICONASTERISK


In der user32.bi wird mit dem Befehl #inclib die Biblithek libuser32.dll.a eingebunden:
Code:
#inclib "user32"
Die Bibliothek libuser32.dll.a findest Du im Verzeichnis lib\win32 Deiner FreeBasic-Installation.

In der user32.bi findest Du folgende Deklaration:
Code:
Declare Function MessageBox Alias "MessageBoxA" ( _
    ByVal hwnd As Integer, _
    ByVal lpText As String, _
    ByVal lpCaption As String, _
    ByVal wtype As Integer _
  ) As Integer
Ich habe Zeilenumbrüche in die Deklaration eingefügt, damit es lesbarer ist.

Hoffe, das hilft Dir jetzt ein wenig weiter.

cu, helpy[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 08.04.2005, 16:43    Titel: Antworten mit Zitat

Wenn man übrigens an einem Nicht-Konsolen-Programm arbeitet kann man mit
Code:
WINDOWTITLE="Test-Programm"
seinem Fenster einen Titel verpassen lächeln
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
code



Anmeldungsdatum: 19.01.2005
Beiträge: 154

BeitragVerfasst am: 08.04.2005, 18:46    Titel: Antworten mit Zitat

ah so ist das also. ich hab mir schon so was in der art gedacht.

aber kann ich auch andere librarys einbinden, also auch librarys deren funktionsdeklaration nicht als bi datei vorliegt.

Nehmen wir ein Beispiel:
in einem ICQ ordner liegt eine datei die heißt xyz.dll .
kann ich eine solche bibliothek auch einbinden?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PeterHarder



Anmeldungsdatum: 27.03.2005
Beiträge: 45
Wohnort: Deutschland

BeitragVerfasst am: 08.04.2005, 19:19    Titel: Antworten mit Zitat

Hallo Code,

hier ist ein Beispiel zum Einbinden einer Funktion aus einer fremden "Lib", dazu musst du "Dim ... As Function()" benutzen, dieser Variablen kannst du dann eine Einsprungadresse zuweisen:

Code:
Option Explicit
Option Private

'$include once:'win\kernel32.bi'
'$include once:'win\user32.bi'
'$include once:'win\gdi32.bi'

Declare Sub DownloadFile(sUrl As String, sFile As String)

Declare Function WinMain(ByVal hInstance As Long, ByVal hPrevInstance As Long, _
        szCmdLine As String, ByVal iCmdShow As Integer ) As Integer  ' Entry point!
End WinMain( GetModuleHandle( NULL ), NULL, Command$, SW_NORMAL )
'
Function WinMain ( ByVal hInstance As Long, ByVal hPrevInstance As Long, _
                   szCmdLine As String, ByVal iCmdShow As Integer ) As Integer
     
  DownloadFile("http://www.daxa-chart.de/chart.gif", "C:\chart.gif")

  WinMain = 0

End Function
'
Sub DownloadFile(sUrl As String, sFile As String)
  Dim addr As Long, hUrlmonDll As Long, back As Long

   Dim Download As Function(ByVal pCaller As Long, _
      ByVal szURL As String, ByVal szFileName As String, _
      ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

  hUrlmonDll = LoadLibraryEx("URLMON.DLL", 0, 0)
  Download = GetProcAddress(hUrlmonDll,"URLDownloadToFileA")
  If Download<>0 Then
    back = Download(0, sUrl, sFile, 0, 0)
    If back<>0 Then
      MessageBox(0, "Download Error Number "+Str$(back), "Error", 0)
    End If
  Else
    MessageBox(0, "Urlmon.dll-Initialisation-Error", "Error", 0)
  End If
  FreeLibrary(hUrlmonDll)

End Sub


Zum Öffnen eines Windows-Fensters, ein Beispiel findest du auf deiner Festplatte hier:
C:\freeBASIC\examples\Windows\gui\hello.bas

Liebe Grüße

Peter
_________________
Deutsche Mailingliste für freeBASIC: de.groups.yahoo.com/group/free-basic.
Zum Anmelden einfach eine leere E-Mail an free-basic-subscribe@yahoogroups.de senden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
code



Anmeldungsdatum: 19.01.2005
Beiträge: 154

BeitragVerfasst am: 08.04.2005, 23:46    Titel: Antworten mit Zitat

danke für die antworten. also ich fasse noch mal zusammen:

1. Bi-dateien, werden dazu benutzt um die Funktionen einer Bibliothek zu definieren. diese dateien werden mitgeliefert um das programmieren zu vereinfachen. (Kann es sein das die Bi-Datein so ähnlich aufgebaut sind wie die .h dateien eines c programms?)

2. Die bibliotheken werden mitgeliefert, man kann aber jede .dll oder .lib in sein Programm einbinden. Allerdings muss man die Funktionen der Datei selber deklarieren, also das machen was normalerweise die bi-dateien machen. (Allerdings hab ich noch nicht richtig verstanden wie man das macht, aber das ist auch nicht so wichtig, mir reichen am anfang die standart libs. zwinkern )

ist das so richtig?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 09.04.2005, 09:49    Titel: Antworten mit Zitat

Ja. zwinkern

Du benutzt DLLs halt ähnlich wie QLBs in QB. Du musst entweder am Anfang die zu verwendenen Funktionen deklarieren oder eine passende BI-Datei einbinden. Du kannst übrigens auch selbst DLLs erstellen. lächeln

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
d.j.peters
Gast





BeitragVerfasst am: 12.04.2005, 22:28    Titel: Re: freebasic grundlagen (vor allem librarys) Antworten mit Zitat

Zitat:
Code:
screen 800,600,32,0

aber da kamm trotzdem nur eine normal dosbox.


Also Du brauchst Dir nicht die Auflösungen zum Screen Befehl merken.
Code:
SCREEN 18 = 640x480 Pixel

oder
Code:
SCREEN 13 = 320x200 Pixel

Du kannst auch folgendes schreiben.
Code:
SCREENRES 320,200

oder
Code:
SCREENRES 640,480

Die komplette Syntax zu SCREENRES ist folgende.
Code:
SCREENRES width,height[,[depth][,[num_pages][,flags]]]


Ja die BI Dateien sind vergleichbar mit den Headerfiles *.h in C & Co.

Generell kannst jede Lib oder Dll benutzen leider reicht es aber nicht nur den Namen einer Funktion zu wissen sondern die Anzahl der Parameter (und dessen Bedeutung) wäre von Vorteil zwinkern auch ist es nicht schlecht wenn Du weist mit welcher Aufrufskonvension die Lib compiliert wurde. Das gibt Auskunft darüber wie die Parameter auf dem Stack abgelegt werden und ob Dein Programm den Stack wieder herstellen muß oder ob es die Lib selbst macht. Bei WINDOWS DLL's ist das meistens API = stdcall = BASIC/PASCALL und FREEBASIC macht den Rest.

Nun gut viel Spaß noch und eine schöne Zeit.

Joshy
Nach oben
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz