#1 03.01.2011 23:17:48

sebX
Newbie
Registriert: 03.01.2011
Beiträge: 2

Intro mit DelphiX/DirectX 7 - 2 Probleme :-(

Hallo!

Ich bin neu hier im Forum und habe 2 Fragen
Vorab - ich habe vor 10-15 Jahren sehr intensiv programmiert, zuerst auf dem Amiga, später am PC - immer jedoch in Assembler. Mittlerweile ist Delphi mir nicht grundsätzlich fremd, aber ein Profi bin ich darin nicht. Ich habe mehrere Jahre lang nicht programmiert und mich vor einiger Zeit doch wieder von den Rechner gesetzt um ein bisschen mit Delphi und DirectX rumzuspielen.

Ich möchte gerne ein kleines Intro, also eine kleine Grafikdemo schreiben - bzw. habe dies getan. Siehe hierzu www.megaupload.com/?d=M66G1O49 -> Sourcecode + compilierte Exe.

Ich benutze Delphi 7 und DirectX - soweit so gut, allerdings ist mir aufgefallen, dass die compilierte Exe (570 kb) recht groß ist und auch komprimiert (200 kb) echt viel ist. In Windows ASM schaffe ich das locker in 2-3 kb. Ich möchte aber gerne Delphi benutzen - es ist einfach schneller zu entwickeln.
Ich habe mir sagen lassen, dass wen ich die "Forms" weglassen würde, die Größe drastisch weniger wäre. Gibt es den ausser DelphhiX andere Libaries die schlaue Köpfe geschrieben haben, die compiliert einfach etwas kleiner sind?
Ich will jetzt keine Grundsatzdiskussion führen warum die Files klein sein müssen oder nicht

In meinem Demo will ich einfach nur ein paar Grafikeffekte darstellen. Ich habe mir also einen Virtual Screen angelegt, also ein leeres Array und kann darin rummalen. Ich will keine Hardwarefunktionen oder so nutzen - will also alles händisch machen. Anschließend kopiere ich den Virtual Screen einfach in den Videoram - fertig.
Ich brauche also wirklich nur eine mimimale DirectX Schnittstelle, bzw. funktionen.
Vielleicht gibt es irgendwelche Header schon fertig, die sich nur darauf beschränken?

Ein weiteres Problem ist alt-tab. Beim Drücken ranzt mir die Grafik irgendwie ab und kriege das auch nicht hin, dass ich das abfange. Hat dort jemand eine Idee?

Also vielleicht einfach mal anschauen wer Zeit und Bock hat -> www.megaupload.com/?d=M66G1O49.

Auf den Punkt gebracht:

1) Ich benutze Delphi7+DelphiX. Gibt es etwas besseres und KLEINERES (Header?) um Grafik mit Delphi im Fullscreen UND Window Mode darzustellen?
2) Alt-Tab macht meine Grafik kaputt - was soll ich tun.

Ich weiß ich bin anspruchsvoll aber auch ein bisschen lame. Es hilft mit eine Zeile Code of mehr als die Aussage -> benutz mal die Surface.IsLost funktion o.ä.
Das hat nichts mit Faulheit zu tun, aber ich bin wie gesagt nicht SO fit in Delphi oder DirectX. Ich kann gut mit Assembler umgehen, aber das wars auch schon

Vielen Dank,
SebX



PS:
Ich hab mein Anliegen auch schon in einem englischsprachigen Forum gepostet. Hier meine Originale Message:

Hallo everyone!

I am new to the forum and i've 2 questions.

about 10-15 years ago I used to program intros and little graphics demos on the commodore amiga and later on pc (under dos) too. I always used assembler (my prefered languange) but delphi is not totally unknown. Just for fun i wanted to code an intro again and tried to used delphi for it, since nobody seems to use asm+directx anymore
I installed Delphi 7 and the DelphiX package and started a little project. The sourcecode and a compiled exe can be found -> www.megaupload.com/?d=M66G1O49.

In my intro i just want to set a video mode (in my case 1024x768x32) and create a "Virtual Screen", that means an array which is 1024x768x4 bytes big.
In this array i can draw and do whatever I want - I know what you think, but i dont want to use any functions like circle, line, fillvector or whatever - i dont want to use system sided 2d/3d functions.
After I have finished my drawing in the "Virtual Screen" i just want to copy that to the video ram.
For that I used the DirectX Timer function.
In the Sourcecode/Intro you can press space to toggle fullscreen/window mode and f1 to see the current FPS.

Everything works fine so fast but now my 2 problems:

1)
the compiled exec is very big. its compressed about 180 kb for alteast no effect.
in pure assembler it would be 2-3 kb not more. is there a possibility to used delphi with directx without making such big files?
i was told that there are pure direct-x header and that delphix is so big because it uses "forms".
can somebody tell/explain/rewrite my source that the compiled and compressed exec will be smaller?
As said i only need the basic functions like setting a video mode and copying a virtual screen to the video ram.

2)
In my intro you can switch using spacebar between fullscreen/window mode.
when i press alt-tab and go back while iam in fullscreen mode everything is screwed.
is there a way to avoid that?

thanks alot everyone for reading this and giving me your time.
I am fear that i'm a little bit lame but i did not programmed for really a long time and i am not used to directx nor i am professional in delphi.
for me its the easiest way to read and understand some lines of code, its difficult when you tell me: use surface.islost function or something,
easier would be a code line example

thanks again,
seb.

sourcecode attached:
www.megaupload.com/?d=M66G1O49


Attachments:
Attachment Icon intro_test.zip, Größe: 235,524 bytes, Downloads: 508

Offline

 

#2 05.01.2011 20:31:28

Lotipats
UltraMember
Registriert: 17.05.2005
Beiträge: 395

Re: Intro mit DelphiX/DirectX 7 - 2 Probleme :-(

Zu 1)
Was für ein Projekt hast du denn angelegt? Eins mit Form-Elementen? Das Problem ist, dass dort ein großer "Rattenschwanz" dran hängt. Wenn du das Formular sowieso nur nutzt, um dort mit DirectX rein zu zeichnen, dann brauchst du den ganzen "Müll" nicht.
Ich selber habe früher Konsolenprogramme angelegt, in denen ich dann http://msdn.microsoft.com/en-us/library … 00%29.aspx genutzt habe, um ein Fenster an zu legen, in dem dann DirectX drin rumwirtschaften durfte. Ich weiß nicht, wie klein das wurde, aber es waren definitiv wesentlich mehr als 3KB. Delphi Language ist nun einmal eine höhere Programmiersprache und verbraucht mehr Speicher. wink

zu 2)
Was genau meinst du? Was bekommst du nicht hin? Weißt du nicht, wie du mitbekommst, wenn dein Programm in den Hintergrund gepackt wird? Oder weißt du nicht, was du dann tun sollst?
Für letzteres könnte evtl. folgendes helfen: http://www.delphidev.de/forum/viewtopic.php?pid=748#p748
Du musst halt deine DirectX-Dinge zurücksetzen oder neu anlegen.

LOTIPATS

Offline

 

#3 05.01.2011 20:42:20

sebX
Newbie
Registriert: 03.01.2011
Beiträge: 2

Re: Intro mit DelphiX/DirectX 7 - 2 Probleme :-(

Hallo Lotipats,

danke für Deine Antwort.
Das Alt-Tab Problem habe ich heute hinbekommen -> im DXTimer ließ es sich hiermit lösen:

Error_Code := FSurface.ISurface.IsLost;                                                                       
if Error_Code <> 0 then                                                                                     
  begin
   FSurface.Free;
   FSurface := nil;
   FSurface := TDirectDrawSurface.Create(DXDraw.DDraw);
   FSurface.SetSize(Intro_X_Resolution, Intro_Y_Resolution);
   SurfaceDesc.dwSize := Sizeof(SurfaceDesc);
   Error_Code := 0;                                                                                         
  end;

Mit der anderen Sache ist es etwas komplizierter. Wenn ich DelphiX nehme und eine "nackte" Exe anlegen (mit Forms) die ich nur brauche damit DelphiX reinzeichnen kann, ist sie 170 kb groß (gepeackt).
Ich hätte gerne auf die Forms verzichtet - ich brauche sie nicht. Aber DelphiX mit directdraw.pas directx.pas etc. "benötigt" die forms um da klassen abzuleiten etc.
Siehe

type
TMainForm = class(TDXForm)
  DXDraw: TDXDraw;
  DXTimer: TDXTimer;

Ich hätte das gerne kleiner - aber ich würde mich selbst überschätzen wenn ich sage, ich schreibe die ganzen delphi files um - ich hätte jetzt gedacht/gehofft irgendjemand hat das evtl. schon mal gemacht, bzw. würde sagen - ein klacks, mach ich in 5 minuten :-)

Ich hoffe ich hab mich nicht zu verquer ausgedrückt.
Im Sourcecode sieht man ja, dass ich bei uses die Forms drinnehabe.
Wenn ich die rausnehme, haut mit directx halt fehler an den kopf :-)

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson