von Delphi aus an den Videospeicher ?

Beruga

Mitglied
Hallo Leute ... ich habe schon nach Antworten in anderen Foren gesucht.... fand aber bis jetzt nocht nichts ...
also ähmm ... folgendes: ich würde gern den Videospeicher von Delphi aus ansprechen können (in Assembler), was mir aber nicht erlaubt wird ... ich hab schon auch ziemlich intensiv im Nezt nach möglichen Informationen gesuch ... und fand leiden nichts ... könnte mir bitte jemand da weiterhelfen ... (ob ich dazu einen Treiber schreiben muss ? und wie .. oder sonst wie ...)

danke im vorraus
 
Du kannst unter Windows nicht einfach so den Videospeicher auslesen wie unter DOS. Mit ASM kommst du da nicht weiter. Für solche Scherze verwendet man in der Regel OpenGL oder DirectX.

Einen Treiber kannst du natürlich auch programmieren, aber hast du schon einmal versucht, einen Treiber für eine GeForce-Karte oder ähnliche zu schreiben? Also, ich würde es lieber nicht versuchen ... kannst ja mal nVidia und ATI anrufen und nach den Datenblättern fragen :p (Spaß muss sein)

Gawayn
 
Na ja, wieso nicht möglich? Es ist ja möglich, auf den Videospeicher zuzugreifen. Wie ich bereits sagte, nimmt man dazu OpenGL oder DirectX. Außerdem ist es wichtig, was du eigentlich machen willst. Wenn du z.B. einfach nur das aktuelle Bild auslesen willst, geht das sogar mit dem WinAPI, indem man einen DC für den Desktop anfordert.

Gawayn
 
ne .. meine Idee war folgende, ich wollte einfach (ohne der Nutzung von OpenGL oder DirextX) ein Game coden mit nicht sonderlich anspruchsvollen Graphic, also dahte ich mir das ich mit der 10h funktion (wie früher unter pascal) auskommen könnte .. nun kann ich immernoch auf den Speicher zugreifen aber nicht mehr in den Videomodus (13h) wechseln .. bzw. die interrups ausführen... was das eigentliche Problem war....
 
Im Softwareinterrupt 10h sind die Videofunktionen des BIOS zu finden. Die haben unter Windows nichts mehr zu suchen. Das macht aber nichts, weil du sie ja nicht brauchst. Wozu sollte man über INT 10h den Modus 13h einstellen, wenn man das mit den entsprechenden Win32-Funktionen auch tun kann?

Wenn du keine anspruchsvolle Grafik brauchst, also kein OpenGL oder DirectX, dann nimm doch einfach die Win32-Funktionen und fertig ist die Laube. Wenn du Vollbild willst, dann kannst du das mit ChangeDisplaySettings() einstellen. Wie das geht, steht komplett in MSDN.

Außerdem benötigst du für all das keinen direkten Zugriff auf den Videospeicher. Du kannst z.B. einen Speicherbereich auf dem Heap reservieren und ihn als Bitmap verwenden. Du zeichnest dann dort hinein und blittest ihn auf deinen DC. Dafür gibt es die sehr schöne und nützliche Funktion SetDIBitsToDevice()!

Gawayn
 
Zuletzt bearbeitet:
also .. danke erst einmal für dene Antworten ... da hätte ich aber auch gleich eine andere Frage.
ich habe das mit dem fullscreen modus versucht was aber nicht wirklich funktioniert hat ... also das ist der code:

procedure TForm1.FormCreate(Sender: TObject);
var
dmod : DevMode;
begin
ZeroMemory(@dmod, sizeof(dmod));
dmod.dmSize := sizeof(dmod);
dmod.dmPelsWidth := 640;
dmod.dmPelsHeight := 480;
dmod.dmBitsPerPel := 32;
dmod.dmFields := DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT;
if ChangeDisplaySettings(dmod, CDS_FULLSCREEN) = DISP_CHANGE_SUCCESSFUL then
ChangeDisplaySettings(devmode(nil^),0);
end;

... mach ich hier was ich nicht machen darf ... muss der wechsel zum anderen zeitpunkt erfolgen ... oder ist der code falsch .... :( also aich weis nicht weiter
 
Ich zeige dir mal meinen Code, mit dem ich in den Modus 800x600x16 wechsle:
Code:
DEVMODE dm ;

dm.dmSize = sizeof dm ;
dm.dmBitsPerPel = 16 ;
dm.dmPelsWidth = 800 ;
dm.dmPelsHeight = 600 ;
dm.dmDisplayFlags = 0 ;
dm.dmDisplayFrequency = 75 ;
dm.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|
    DM_DISPLAYFLAGS|DM_DISPLAYFREQUENCY ;

ChangeDisplaySettings( &dm, 0 ) ;
Ok, das ist C, aber macht ja nix.

Gawayn
 
ok .. ich hab es ausprobiert un es hat soweit wunderbar funkioniert ... was ich aber eigentlich machen wollte war ja neben den modus zu wechseln auch in den fullscreen modus zu wechseln was aber bis jetzt nicht wirklich ging :( ...... gibt es irgendwas bestimmtes was ich beachten müsste
 
Um dein Fenster fullscreen zu machen, musst du die Fenstereigenschaften umstellen. Normalerweise reicht es, dem Fenster keinen Rahmen zu geben und es zu maximieren.

Gawayn
 

Neue Beiträge

Zurück