[Delphi] win32 applicatie zonder main form

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09 16:28

BdR

TV is gooder then books

Topicstarter
is het mogelijk een applicatie te maken zonder main form? Ik wil gewoon wat bestanden omzetten enzo, die hoeft helmaal niet te laten zien aan de gebruiker, afgezien van evt. een ShowMessage.

Maar als ik "New" en dan "Console application" kies, dan opent de uiteindelijke executable steeds eerst zo'n command-prompt window (waar verder niets mee gebeurt) Kan dat op 1 of andere weggehaald worden?

Of moet ik "New" doen en dan "Application" en dan rommelen in de Project-source? Want bij een "Application" zie je altijd nog even het mainform heel kort verschijnen. Daarnaast, zo'n form voegt onnodige code (dus grootte) aan .EXE toe.

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

console weghalen doe je met FreeConsole () (en eentje aanmaken met AllocConsole ())

ik heb verder niet veel verstand van delphi, maar kun je niet gewoon een kaal project starten zonder dat je de hele VCL eromheen hebt zitten?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Maak een standaard Application, Verwijder je Form uit het project (project>Remove from project) en pas je dpr bestand zo aan (project>view source):
code:
1
2
3
4
5
6
7
8
9
10
program Project1;

uses
  Windows ; // enz enz enz

{$R *.res}

begin
 // hier al je code
end.

Nu heb je een programma die niks toont. Ook geen console

...beter bekend als AMFan


Acties:
  • 0 Henk 'm!

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06 16:43

Varienaja

Wie dit leest is gek.

Op donderdag 04 juli 2002 12:28 schreef Delpix het volgende:
...
Nu heb je een programma die niks toont. Ook geen console
Dit werkt ook heel goed om een stiekum progje te runnen bij iemand. >:)

(Porno op de achtergrond zetten bij een huisgenoot na 30 minuten >:))

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09 16:28

BdR

TV is gooder then books

Topicstarter
Op donderdag 04 juli 2002 12:28 schreef Delpix het volgende:
Maak een standaard Application, Verwijder je Form uit het project (project>Remove from project) en pas je dpr bestand zo aan (project>view source):
aha ja dat werkt. Zoiets kan je ook met een "Console application" doen zag ik al (verschil is dat je dan geen icoontje aan de .EXE kan toekennen)

maaruh ander vraagje dan, de .EXE is dan nog steeds rond de 300kb!? :? het lijkt me dat dat veel kleiner kan als je alleen een ShowMessage doet en verder niets, maar hoe.. ik bedoel niet met upx ofzo

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-09 16:31

Bosmonster

*zucht*

Op donderdag 04 juli 2002 13:11 schreef BdR het volgende:

[..]

aha ja dat werkt. Zoiets kan je ook met een "Console application" doen zag ik al (verschil is dat je dan geen icoontje aan de .EXE kan toekennen)

maaruh ander vraagje dan, de .EXE is dan nog steeds rond de 300kb!? :? het lijkt me dat dat veel kleiner kan als je alleen een ShowMessage doet en verder niets, maar hoe.. ik bedoel niet met upx ofzo
Volgens mij is dat gewoon minimum.. Anders moet je C++ nemen ofzo :)

Acties:
  • 0 Henk 'm!

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06 16:43

Varienaja

Wie dit leest is gek.

Hum, als je een leeg .dpr-bestandje compileert, krijg je een executable van 20kB ofzo. Ik denk dat je teveel modules in je uses-clause hebt staan.

Siditamentis astuentis pactum.


Acties:
  • 0 Henk 'm!

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Gebruik geen Dialogs en/of Forms unit. Deze maken je app al bijna 250kb grooter.

Om dialogen te tonen kan je de MessageBox api functie nemen. Deze zat dacht ik in de unit Windows.

Edit:
Windows.Messagebox(Handle,PChar('Tekst'),PChar('Titelbalk'),MB_OK + MB_ICONINFORMATION);

...beter bekend als AMFan


Acties:
  • 0 Henk 'm!

  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09 16:28

BdR

TV is gooder then books

Topicstarter
Op donderdag 04 juli 2002 13:32 schreef Delpix het volgende:
Gebruik geen Dialogs en/of Forms unit. Deze maken je app al bijna 250kb grooter.
hee ja.. maarja ShowMessage zit in Dialogs
Om dialogen te tonen kan je de MessageBox api functie nemen. Deze zat dacht ik in de unit Windows.

Edit:
Windows.Messagebox(Handle,PChar('Tekst'),PChar('Titelbalk'),MB_OK + MB_ICONINFORMATION);
dus zo?
code:
1
Windows.Messagebox(1, 'test123..'), 'Titel', MB_OK + MB_ICONINFORMATION);

ik heb voor die handle maar 1 ingevuld..? :? maar ik krijg geen messagebox.

Maar ik heb het denk ik al, als ik bij het menu Project->Options->Packages de optie "Build with runtime packages" uitzet (niet aanvink) wordt de .EXE meteen stukken kleiner (van 300kb naar 9kb)

Packages zijn een soort DLL's die in de .EXE worden gezet, maar evt. ook apart kunnen worden gehouden. Dus even testen op een pc zonder Delphi om te zien welke packages wel en niet nodig zijn en dat is dan wat ik zoek, denk ik :7

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider


Acties:
  • 0 Henk 'm!

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Op donderdag 04 juli 2002 14:05 schreef BdR het volgende:

..
code:
1
Windows.Messagebox(1, 'test123..'), 'Titel', MB_OK + MB_ICONINFORMATION);

ik heb voor die handle maar 1 ingevuld..? :? maar ik krijg geen messagebox.
Volgens mij wou 0 wel helpen als handle.
En maak van je strings een PChar. Omdat je hier werkt met een API functie. ( Pchar('blaa') )

...beter bekend als AMFan


Acties:
  • 0 Henk 'm!

  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09 16:28

BdR

TV is gooder then books

Topicstarter
Op donderdag 04 juli 2002 14:13 schreef Delpix het volgende:
Volgens mij wou 0 wel helpen als handle.
En maak van je strings een PChar. Omdat je hier werkt met een API functie. ( Pchar('blaa') )
idd met 0 als handle werkt het goed, en trouwens met hWnd(nil) werkt ook.. :? wat houdt die hWnd eigenlijk in, de handle van een form of applicatie waaraan de messagebox gekoppeld wordt? (en die mag blijkbaar null zijn?)

en een string 'blabla' ipv Pchar('blabla') werkt het al goed, dus.. maar okee typecast Pchar() is kleine moeite

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider


Acties:
  • 0 Henk 'm!

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Geef je de handle door van het venster dan zal windows dat venster bevriezen totdat de dialoog gesloten is. (overige zichtbare vensters van je applicatie zijn wel bereikbaar)

Geef je de handle van de applicatie door, dan kan je niet verder met het programma totdat het dialoog gesloten is.

En als je die 0 gebruikt zal je dialoog nergens aan gekoppeld worden. (tot zover ik weet)

...beter bekend als AMFan


Acties:
  • 0 Henk 'm!

  • WOmBaT
  • Registratie: September 2000
  • Laatst online: 02-09 07:31

WOmBaT

Nyaaa!!!

Op donderdag 04 juli 2002 13:25 schreef Bosmonster het volgende:
Volgens mij is dat gewoon minimum.. Anders moet je C++ nemen ofzo :)
Dat is niet waar :P
Je kunt in latere versies van delphi ook zonder een uses clause compileren. Het hangt er maar van af welke modules je nodig hebt. Ik gebruik er in mijn programma's (zonder console of forms) drie en de executable is ongeveer 40kb. Nog vrij groot, maar zeker geen 300 kb :)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou het zo doen:
bij in de project unit:


application.createform(Tform1, form1);
application.showmainform := false;

Messagebox:

if Messagedlg('zet hier je text', mtinformation,[mbyes,mbno],0)= mryes then
begin
doeiets;
end;

Is 't wat? :)

Acties:
  • 0 Henk 'm!

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Maar dan heb je de unit Forms nodig en dat wordt de applicatie meteen ook weer 300KB grootter.

En als de applicatie meteen weer moet sluiten nadat hij zijn actie's verricht heeft, is een venster ook niet nodig.

...beter bekend als AMFan


Acties:
  • 0 Henk 'm!

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 24-02 12:16
Op donderdag 04 juli 2002 14:05 schreef BdR het volgende:

[..]
Maar ik heb het denk ik al, als ik bij het menu Project->Options->Packages de optie "Build with runtime packages" uitzet (niet aanvink) wordt de .EXE meteen stukken kleiner (van 300kb naar 9kb)

Packages zijn een soort DLL's die in de .EXE worden gezet, maar evt. ook apart kunnen worden gehouden. Dus even testen op een pc zonder Delphi om te zien welke packages wel en niet nodig zijn en dat is dan wat ik zoek, denk ik :7
Als je 'm met runtime packages hebt gecompileerd kan je zien bij project->information welke packages die nodig heeft. Ik zou het echter niet doen, want de standaard package voor de vcl is groot. In Delphi 6 is dat 1,9 MB.
Dat is alleen leuk als er veel software op draait die gemaakt is in Delphi, of je wilt kleinere updates kunnen uitbrengen.

Werkende MessageBox:
code:
1
2
3
4
5
6
7
8
9
10
program Project1;

uses
  Windows;

{$R *.res}

begin
  MessageBox(0, 'hiero een mededeling', 'titel van dialoog', MB_OK + MB_ICONINFORMATION)
end.

P.S. Haal onnodige units weg uit uses-clauses. Ookal gebruik je de functionaliteit niet, toch maakt dit uit voor de grootte. Bovenstaand voorbeeld is 9,00 kB (9.216 bytes). Als je bijvoorbeeld ook SysUtils gebruikt wordt de exe al 38,5 kB (39.424 bytes).
Ik heb in bovenstaand voorbeeld wel {$R *.RES} laten staan. Zo heeft je exe wel een icoon, ten koste van 1024 bytes.

P.S. nr 2: De bestandgroten zijn die bij Delphi 6 SP 2.

Acties:
  • 0 Henk 'm!

  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09 16:28

BdR

TV is gooder then books

Topicstarter
nog een vraag dan, ik doe dus het volgende
code:
1
2
3
4
5
6
7
8
9
10
program Project1;
uses
  Windows;

{$R *.res}

begin
  MessageBox(0, 'hiero een mededeling', 'titel van dialoog',
  MB_OK + MB_ICONINFORMATION)
end.

en kies dan bij project->options->application tab een eigen icoontje (ipv dat standaard delphi icoontje) en maak de executable (build project). Die .exe zie ik in explorer dan met dat zelfgemaakte icoontje.

Als ik die executable opstart krijg ik de messagebox maar in de windows taakbalk zie ik dan alsnog het standaard delphi-icoontje.. :?

Ik heb ook met resource hacker in de executable gekeken, maar dan vind ik alleen mijn eigen icoontje en niet dat standaard delphi icon. hoe kan dit?

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider


Acties:
  • 0 Henk 'm!

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 24-02 12:16
Ik krijg wel een aangepast icoon te zien (Delphi 6). Ben bang dat ik je daar niet verder mee kan helpen.

Acties:
  • 0 Henk 'm!

Verwijderd

Idem hiero, ik krijg geen icootnje in de taakbalk te zien (dus ook niet het std. Delphi icoontje). Ook D6 SP2.

Check even wat je voor .res bestandjes in je project dir hebt staan, en verwijder die eens..

Wat overigens je app. qua formaat ook wel wil verkleinen is door bij je project options, op het tabblad compiler bij 'debug' alles uit te vinken. Voor het voorbeeld hier maakt het geen moer uit overigens.

Acties:
  • 0 Henk 'm!

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Als ik het programma uitvoer zonder resource bestand, krijg ik geen icoon te zien.
Met resource file en eeen ander icoon zie ook ik de Delphi icoon verschijnen :(

Messchien een idee om geen icoon te gebruiken (verwijder {$R *.res} uit je project).

Een andere oplossing zou ik op dit moment niet weten.

...beter bekend als AMFan


Acties:
  • 0 Henk 'm!

Verwijderd

eerst die .res verwijderen, en dan via je project options een nieuw icoon toewijzen?

Acties:
  • 0 Henk 'm!

  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09 16:28

BdR

TV is gooder then books

Topicstarter
Op maandag 08 juli 2002 18:45 schreef hezik het volgende:
eerst die .res verwijderen, en dan via je project options een nieuw icoon toewijzen?
8-) thanks.. dat werkt inderdaad

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider


Acties:
  • 0 Henk 'm!

  • Magic
  • Registratie: September 2001
  • Niet online
je kunt natuurlijk ook form.visible op false zetten.

Steam: Brainfrz82 | PSN: Brainfrz | Discord: Brainfrz


Acties:
  • 0 Henk 'm!

  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09 16:28

BdR

TV is gooder then books

Topicstarter
het resultaat.. dussss... lekker nuttig :P
Op maandag 08 juli 2002 22:38 schreef Magic het volgende:
je kunt natuurlijk ook form.visible op false zetten.
je kunt natuurlijk ook de andere posts doorlezen.. :{

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider

Pagina: 1