Autor Beitrag
SebX
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 03.01.11 20:57 
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
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 03.01.11 21:14 
user profile iconSebX hat folgendes geschrieben Zum zitierten Posting springen:
1) Ich benutze Delphi7+DelphiX. Gibt es etwas besseres und KLEINERES (Header?) um Grafik mit Delphi im Fullscreen UND Window Mode darzustellen?
Was willst du jetzt? Besser oder kleiner?

Es hat nun einmal einen Grund, dass die ausführbaren Dateien größer sind. Es sind einfach mehr Funktionen verfügbar. Und es ist eben einfacher zu verwenden.

Je kleiner die Exe sein soll (warum auch immer... :roll:), desto weniger Funktionen hast du zur Verfügung. Und oft funktioniert es auch schlechter, weil es eben kein großes und häufig verwendetes Framework ist, sondern ein kleines kaum verwendetes Nischenprodukt. Das ist dann oft auch dementsprechend schlecht getestet.

Da musst du eben wissen was dir wichtiger ist. Ein paar Kilobyte sparen, weil das heute ja noch so oberwichtig ist bei unseren kleinen Festplatten und langsamen Internetanschlüssen, oder ob du lieber mehr Komfort und meistens auch Stabilität willst...
SebX Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 03.01.11 21:26 
Danke erstmal für Deine Antwort.

Kleiner wäre eigentlich mein Wunsch.

Ich brauche ja tatsächlich nur minimalste Funktionen.

Also Videomode setzen und etwas "kopieren" :-)

Und ja ich weiß, dass es befremdlich erscheint, ob nachher die Exe gepackt 210 kb oder 50 kb groß ist - aber es widerstrebt mit sozusagen einfach funktionen zu implemntieren, die ich nicht brauche. Aber ich wollte diesbezüglich keine Grundsatzdiskussionen führen.

Ich bin für alle Vorschläge offen. Aber wie gesagt - je kleiner desto besser. Ein Beispiel mit Verwendung von z.B. ausschließlich DX Header wäre schon der Wahnsinn :-)
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mo 03.01.11 21:44 
Ich hab grad mal ausprobiert wie groß ein Projekt ist wenn man es ohne Forms und mit DGLOpenGL kompiliert: 48 kb. DGLOpenGL ist allerdings ein Header für OpenGL und nicht DirectX. Sollte das für dich okay sein, dann gibt es hier die Unit und viele weitere Informationen.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 03.01.11 21:48 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Je kleiner die Exe sein soll (warum auch immer... :roll:), desto weniger Funktionen hast du zur Verfügung.
Da versteht einer die Scene nicht - genau darum geht es ja ;)
Wenn du Forms brauchst, bietet sich z.B. die KOL (Key Objects Library) an. Ich weiß allerdings nichts obs die noch gibt ;) Wenn nicht unbedingt, dann kann man die auch recht einfach per Windows API erstellen - Lucky hat da ein schönes Tutorial.

Viele Demos werden heute auch basierend auf der SDL gebaut. Da kommt dann auch OpenGL mit, das ist bei Fullscreen wesentlich einfacher. Eine Demo mit OpenGL und WinAPI (ohne SDL) hab ich vor Jahren mal gebaut.

user profile iconTilman hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab grad mal ausprobiert wie groß ein Projekt ist wenn man es ohne Forms und mit DGLOpenGL kompiliert: 48 kb.
Das spannende daran ist, dass hier noch viel geht, wenn man nicht einen dynamisch ladenden, sondern einen statisch gebundenen Header verwendet. Da geht VIEL Code für das finden von Methoden drauf, den man nicht unbedingt braucht.

Was aber nichts daran ändert, dass immer die Delphi-RTL drin ist, und die ist bei Demos genau das größte Problem. Irgendwas um die 30kB ist da in System, Windows etc.
Auch hier gibts Replacements, da hab ich aber nix gutes als Link da.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 03.01.11 22:06 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Auch hier gibts Replacements, da hab ich aber nix gutes als Link da.
Da kann man auch einfach aus den Delphiunits kopieren was man selbst braucht. Ist zwar nicht gerade lizenzkonform, funktioniert aber gut.

Ich habe das einmal für ein Mini-SFX Modul gemacht bevor ich es komplett in Assembler geschrieben habe. ;-)
SebX Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 03.01.11 22:45 
Vielen Dank erstmal für die zahlreichen Antworten. Martok hat`s schon auf den Punkt getroffen - das Projekt hat tatsächlich einen Scenebezug.
Daher ist es schon für mich wichtig, ob es nachher 200kb (oder 210kb) groß ist ODER ABER möglicherweise nur 80kb/90kb. Es wäre für mich möglich die Sache auch in ASM zu schreiben - der Auffwand (eigentlich ist es mehr die Zeit) ist es mir dann aber nicht Wert obs 20kb oder 80kb sind. Zum anderen fehlt mir für Assembler ein guter MOD/XM-Player, den ich aber für Delphi habe.

Daher meine Entscheidung für Delphi.

Ob`s nachher DirectDraw, Direct3D oder OpenGL ist - ist mir fast egal.
Meine Projecte basieren so, dass ich mir wie gesagt etwas in einem Array bastle und dieses Array angezeigt bekommen möchte.

Das funktioniert mit Delphi-X super, mit D3D oder OpenGL vermutlich auch - aber ich könnte mir vorstellen, dass ich hier vorgaukeln müsste, dass es eine Art Textur ist.
Also quasi (jetzt aus dem Bauch raus) CopyRectangle(0,0,1024,768,Virtual_Screen,Angle,Transparency) etc.
Ich stell mir das also so vor, dass ich mit einer schlauen Funktion an Position 0,0 ein Image vomn 1024*768 kopiere und nebenbei ein paar Parameter übergebe.

Ich will aber eigentlich nur ein viereckies statisches Bild kopieren - 60x pro sec. mehr nicht.
Und ich dachte mir, da es eigentlich simpler nicht geht - DirectDraw, bzw. DelphiX. Nur die Größe wurmt. Ich hätte daher vermutet/gehofft, dass schon mal jemand diese DelphiX Version abgespeckt hat oder irgendwelche Forms ersetzt hat.

Ich sagte ja, ich kann gut in Assembler coden, aber das ist ein Unterschied ob ich nun versuche selbst in DelphiX rumzupfuschen - da geh ich dran kaputt :-/
Das mit kolmck.net/ ist eine gute Idee - aber auch schon wieder (ich bin ehrlich - etwas zu viel Info für mich) :-).

Ich brauche die Forms für mein Intro nicht - und liesse ich sie weg, würde ich Platz sparen und es würde mir reichen.
Aber es sieht so aus, als bräuchte DelphiX Forms, oder sehe ich das falsch?
Ich kann da jedenfalls die uses Forms nicht rausnehmen, ohne das er meckert.

Man müsste also die DelphiX Geschichte modifizieren?

Vielleicht hat ja jemand Lust, bzw. ist in der Lage den Sourcecode (wenn es möglich ist und keinen großen Auffwand macht) zu modifizieren?
Ich will jetzt nicht andere Leute für mich arbeiten lassen - aber ich merke selbst, dass ich mit dieser Geschichte mit dem Filegrößen-Quatsch erstmal an meine Grenze stoße :-)
Vorerst.. :-/

Selbstverständlich werde ich hier das Rätsel auflösen und das Projekt dann auch zeigen - es ist eigentlich schon fertig - aber ich wollte es halt gerne "größenmässig" verbessern..

habe jetzt gerade noch das gefunden:

forum.delphi-treff.d...ndex.php/t-6930.html

trifft eigentlich ganz gut was ich suche - nur müsste es halt noch fullscreen sein und ich muss irgendwie diese routine hinbekommen im render loop etwas ins surface zu kopieren