[delphi] popupje bij starten programma

Pagina: 1
Acties:
  • 116 views sinds 30-01-2008
  • Reageer

  • banaan-X
  • Registratie: Februari 2001
  • Niet online
Ik wil graag dat er bij het starten van een programma een form2 (oid) voor het staandaard form1 opspringt waarin ik ook plaatjes en eigen tekst kan zetten.

Hoe moet/kan dit?

  • Neman
  • Registratie: September 2000
  • Laatst online: 30-08 12:47

Neman

Een uit de lucht gegrepen naam

code:
1
2
3
4
5
6
7
8
9
10
var
nieuwform: TForm;

begin
nieuwform := TForm.Create(nil);
nieuwform.Caption := 'Hallo, ik ben een nieuw form ;)';
nieuwform.FormStyle := fsStayOnTop;
nieuwform.Position := poMainFormCenter;
nieuwform.Show;
end;

Zoiets?

Verwijderd

Een 'Splash' heet dat geloof ik...

Kan op meerdere manieren.
Verzin iets leuks! :)

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 04-05 00:03

Engineer

Software

showmessage('blaat'); ? :)

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Op zondag 09 september 2001 02:49 schreef Rummbler het volgende:
Een 'Splash' heet dat geloof ik...

Kan op meerdere manieren.
Verzin iets leuks! :)
In de Help van Delphi staat een heel goed voorbeeld, zoek maar ff. :)

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • banaan-X
  • Registratie: Februari 2001
  • Niet online
Op zondag 09 september 2001 11:06 schreef jelmervos het volgende:

[..]

In de Help van Delphi staat een heel goed voorbeeld, zoek maar ff. :)
OK! :)
Ik heb alleen nu wat gekloot: met new, en dan form; maar dan komt er ook meteen een nieuwe unit. Die unit heb ik geused in Unit1 van Form1 ("uses unit2" dus). Verder nog een frame en 2 andere units, die moeten dus eigenlijk even uit het project worden verwijderd, maar hoe doe je dat?

Kun je dan trouwens ook een plaatje in dat nieuwe form zetten met:

nieuwform := TForm.Create(nil);
nieuwform.Caption := 'Hallo, ik ben een nieuw form ;)';
nieuwform.FormStyle := fsStayOnTop;
nieuwform.Position := poMainFormCenter;
nieuwform.Show;

Ik bedoel: waar ontwerp je dat form dan? Hij moet nl. even wat uitleggen en dan moet de gebruiker m met een OK-knop aflsuiten.

  • freddifish
  • Registratie: November 2000
  • Laatst online: 29-01 09:15

freddifish

schnappi !

somebitmap:=Tbitmap.create;
somebitmap.loadfromfile('whatever.bmp');
nieuwform.canvas.draw(0,0,somebitmap)

'people say I'm a drinker, but I'm sober half the time' - Mick Jagger | mail: freddifish_AT_gmx.net


  • douweh
  • Registratie: Maart 2001
  • Laatst online: 20-08 18:34
Ligt t aan mij of wordt er enorm moeilijk gedaan...
Je kan toch gewoon een nieuw form designen..

Form2,

en dan doen Form2.ShowModal; als je m wil tonen..??

  • banaan-X
  • Registratie: Februari 2001
  • Niet online
Op zondag 09 september 2001 19:43 schreef douweh het volgende:
Ligt t aan mij of wordt er enorm moeilijk gedaan...
Je kan toch gewoon een nieuw form designen..

Form2,

en dan doen Form2.ShowModal; als je m wil tonen..??
Dat probeerde ik dus ook:
Maar ik had dus wat gekloot: met new, en dan form; maar dan komt er ook meteen een nieuwe unit. Die unit heb ik geused in Unit1 van Form1 ("uses unit2" dus). Verder nog een frame en 2 andere units, die moeten dus eigenlijk even uit het project worden verwijderd, maar hoe doe je dat?

Verwijderd

Wat ook kan is dat form2 eerst opstart.
Daar programmeer je een timertje in.
in de timer:
form1.show;
form2.close;

Zo heb ik het ooit eens gedaan

  • Neman
  • Registratie: September 2000
  • Laatst online: 30-08 12:47

Neman

Een uit de lucht gegrepen naam

Verder nog een frame en 2 andere units, die moeten dus eigenlijk even uit het project worden verwijderd, maar hoe doe je dat?
Ik edit de dpr-file altijd even, gewoon weghalen onder 'uses'.

Je merkt al dat er heel wat manieren zijn om iets te maken wat jij wil. Ik begin een beetje door te krijgen wat je precies wilt en dan is dit de beste manier denk ik:

-Add een nieuw form
-Gooi er een TImage en een TButton op
-Stel de ModalResult property van de Button in op mrOK
-Gooi de unit onder Uses in de unit van Form1
-Gebruik deze code om het Form te tonen (ik ga even uit van Form2):
code:
1
2
3
4
5
6
7
With TForm2.Create(Self) do
begin
 try
  ShowModal;
 finally
  Free;
end;

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 27-07 15:54
Ik doe vaak het volgende:
edit de project-source in bijvoorbeeld het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.Title := 'Demo';

  Form2 := TForm2.Create(nil);
  Form2.Show;
  Application.CreateForm(TForm1, Form1);
  Form2.Free;
  Application.Run;
end.

Unit1/Form1 is je hoofdform en unit2/form2 is je splash.
Het voordeel is dat als je hoofdform bijv. veel database zooi bevat, en er dus een eeuwigheid over doet om te laden, dat dat laden gebeurd terwijl je splash zichtbaar is.

Zelf zet ik altijd van de splash de borderstyle op bsnone, dan heb je geen randen en titelbalk.

P.S. Form1 wordt pas zichtbaar op de regel Application.Run;

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Knip en plak uit mijn projectje:
code:
1
2
3
4
5
6
7
8
9
10
11
procedure Startup (aangeroepen in FormCreate van mainform)
var S:TwSplash; // kan je gewoon in Delphi designen
begin
   S:=TwSplash.Create(nil);
   S.Show;
   S.Update;

//initializeren van je progje

   S.Destroy
end;

Siditamentis astuentis pactum.


  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

een splash window creeer je in de hoofdunit van het project!!! dus als je project project1 heet, stop je het in de project1 unit:


program project1;

uses
Forms,
mainunit in 'mainunit.pas' {Form1},
splash in 'splash.pas' {SplashScreen};

{$R *.res}

var mySplash : TSplashScreen;
k : integer;

begin
mySplash := TSplashScreen.Create(Application.Owner);
mySplash.Show;
mySplash.Update;
Application.Initialize;
Application.Title := 'Mijn proggie titel';
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TSplashScreen, SplashScreen);
Form1.Show;
k := 0;
while k < 50000 do //een tijdje open laten
begin
if k mod 10 = 0 then application.ProcessMessages;
//anders lijkt programma bevroeren
inc(k);
end;
mySplash.Hide;
mySplash.Free;
Application.Run;
end.

simple isn't it!

Cogito Ergo Credo


  • marenk_vos
  • Registratie: Augustus 2001
  • Laatst online: 23-07 13:21
Een progressbar op je spalsh met een timer om de balk vol te laten lopen lijkt ook altijd mooi,,,,,,,,,,

Dell XPS 17 Intel i7 2630 Nvidia GT555 3Gb Hd1: OCZ Vertex 2 SSD 60 GB Hd2: 500Gb


  • Wupsje
  • Registratie: Januari 2001
  • Laatst online: 13-11-2024
Je vind genoeg voorbeelden van splashscreens op torry (http://www.torry.net) in the tips..


Wouter

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Op dinsdag 11 september 2001 08:23 schreef jopiek het volgende:
code:
1
2
3
4
5
6
7
8
9
  [..]
  k := 0;
  while k < 50000 do //een tijdje open laten
  begin
    if k mod 10 = 0 then application.ProcessMessages; 
    //anders lijkt programma bevroeren
    inc(k);
  end;
  [..]

simple isn't it!
busy waiting... bah! Dat kun je netjes afhandelen met een timertje. Dat busy waiting werd vaak toegepast bij oude tetris spelletje... moet je die nu eens spelen op een PIII 800mhz!!!. Bovendien kost dit alleen maar tijd, terwijl een splash bedoeld is om de gebruiker vast wat te laten zien als het proggie laadt.

Gewoon een timertje op een seconde zetten, en als 'ie af gaat even je splash sluiten en destroyen.

Localhost, sweet localhost


  • banaan-X
  • Registratie: Februari 2001
  • Niet online
Op dinsdag 11 september 2001 13:33 schreef kvdveer het volgende:

[..]

busy waiting... bah! Dat kun je netjes afhandelen met een timertje. Dat busy waiting werd vaak toegepast bij oude tetris spelletje... moet je die nu eens spelen op een PIII 800mhz!!!. Bovendien kost dit alleen maar tijd, terwijl een splash bedoeld is om de gebruiker vast wat te laten zien als het proggie laadt.

Gewoon een timertje op een seconde zetten, en als 'ie af gaat even je splash sluiten en destroyen.
Inderdaad, ik heb ook al gelezen dat je dus geen delay(x) meer moet gebruiken, maar een windows-timer.

Maar nog ff terugkomend op de popup, ik heb het volgens mij nog veel simpeler gedaan. Ik heb bij new een form gekozen, en vervolgens bij de Project.pas (de program, niet een unit van een form), op de voorlaatste regel de regel "Form2.Show" opgenomen. En dat werkt prima! Ik kan nu ook dat form gewoon bewerken enzo. En dat was de bedoeling.
(Toch) bedankt voor al jullie ideeen.

  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

Op dinsdag 11 september 2001 13:33 schreef kvdveer het volgende:

[..]

busy waiting... bah! Dat kun je netjes afhandelen met een timertje. Dat busy waiting werd vaak toegepast bij oude tetris spelletje... moet je die nu eens spelen op een PIII 800mhz!!!. Bovendien kost dit alleen maar tijd, terwijl een splash bedoeld is om de gebruiker vast wat te laten zien als het proggie laadt.

Gewoon een timertje op een seconde zetten, en als 'ie af gaat even je splash sluiten en destroyen.
en die timertjes zijn net zo onnauwkeurig en werken ook niet op seconden (tenminste de standfaar die bij delphi komt) je kunt betere timers downloaden op torry en delphi super page.

Maar uiteraard kun je zo'n splashscreen wel zo gebruiken indien je niets zinnigs te laten hebt, is dat wel het geval vervang je de loop voor de initialisaties...

Cogito Ergo Credo


  • Halfkakkende
  • Registratie: Juni 2000
  • Laatst online: 17-09 15:33

Halfkakkende

Vandring

ik zou niet doen bij OnCreate ofzo, maar nog voordat het programma opgestart wordt zeg maar, voor Application.Initialize dus.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
program blaat blaat

{enz.}

begin
  with TSplashScreen.Create(nil) do begin
    Show;
    Application.Initialize;
    Application.CreateForm(Form1, TForm1);
    Free;
    Application.Run;
  end;
end;



zoiets ongeveer ff snel uit me hoofd...

MUZIEK!


  • 9900578Heck
  • Registratie: Juli 2001
  • Laatst online: 21-07 09:24
en die timertjes zijn net zo onnauwkeurig en werken ook niet op seconden (tenminste de standfaar die bij delphi komt)
TTimer uit delphi heeft een nauwkeurigheid van 55 ms is echt wel genoeg om een formpie te laten zien hoor...
Pagina: 1