Toon posts:

[Delphi] Tutorial vraagje over OnCreate property

Pagina: 1
Acties:

Verwijderd

Topicstarter
De tutorial op: http://delphi.about.com/library/weekly/aa052802b.htm
heeft maar een klein beetje code, maar aan het einde van de pagina wordt er gezegd:
4. Try adding a code for the OnCreate event of a form to make a form appear centered on a screen. Also, make yourself familiar with the Position property of the TForm object.
Ik heb van alles geprobeerd, maar het lukt me niet. Eigenlijk wil ik geen pasklaar antwoord hebben, maar meer een hint in welke richting ik moet zoeken waarbij er aan gedacht wordt dat ik een totale newbie ben. Mocht iemand toch een pasklaar antwoord weten dan is dat ook goed natuurlijk, het waarom kan ik er dan denk ik zelf wel uithalen, maar graag een hint dus...

Verwijderd

Topicstarter
Ik weet dat ik in de code iets moet zetten als: Form1.OnCreate en dan nog iets (Position PoDesktopCenter waarschijnlijk) maar waar in de code moet het komen en hoe zeg ik het "grammaticaal" goed ???

Form1.OnCreate Position:= PoDesktopCenter

gaat niet lukken....

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
moeilijke manier? form1.left & top + screen.height en width (maar met height heb je al genoeg).... :)

maar waarom? als je hem toch op screencenter zet gaat het toch al goed???
een nieuw form doe je gewoon 'mainform center' (vanaf delphi 6??)

Opensource delphi componenten (http://www.delphi-jedi.org)


Verwijderd

Topicstarter
Mr.Nobody schreef op 24 augustus 2002 @ 23:32:
moeilijke manier? form1.left & top + screen.height en width (maar met height heb je al genoeg).... :)

maar waarom? als je hem toch op screencenter zet gaat het toch al goed???
een nieuw form doe je gewoon 'mainform center' (vanaf delphi 6??)
Mja, gewoon de property zelf wijzigen is denk ik niet de bedoeling... dat zou te simpel zijn denk ik, vandaar dat ie zegt: maak een code die het formulier op het scherm centreert..... dus had ik bovenstaande bedacht maar waar en hoe zet ik dat dan in de code? Of kan wat ik wil niet op die manier en wordt er wel simpelweg bedoeld dat de waarde van de Position property op PoDesktopCenter wordt gezet door het gewoon te wijzigen in de property lijst van form1?

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
Verwijderd schreef op 24 augustus 2002 @ 23:35:
[...]


Mja, gewoon de property zelf wijzigen is denk ik niet de bedoeling... dat zou te simpel zijn denk ik, vandaar dat ie zegt: maak een code die het formulier op het scherm centreert..... dus had ik bovenstaande bedacht maar waar en hoe zet ik dat dan in de code? Of kan wat ik wil niet op die manier en wordt er wel simpelweg bedoeld dat de waarde van de Position property op PoDesktopCenter wordt gezet door het gewoon te wijzigen in de property lijst van form1?
mmm,
Try adding a code
maak maar wat, je hebt de vrije hand. als je het op mijn manier doet moet je ook nog wat nadenken.

ik bedoel: gebruik de breedte/hoogte van het scherm om het form in het midden te krijgen rekening houdend met de breedte en hoogte van het form. en dan in te vullen bij form1.left en form1.top

maar ik vindt het eigenlijk niet nuttig, omdat je dat voor een form toch niet zult gebruiken. voor componenten wel, maar het gaat hier om de oncreate te testen dus maakt het niet uit wat je doet :?

veel leuker is het om bv in je oncreate dingen aan te roepen die nog niet bestaan. dan heb je dat dus ook geleerd :)

edit: om dat NIET te gebruiken omdat het dus niet kan :)

Opensource delphi componenten (http://www.delphi-jedi.org)


Verwijderd

Topicstarter
Mr.Nobody schreef op 24 augustus 2002 @ 23:42:
[...]


mmm,
[...]


maak maar wat, je hebt de vrije hand. als je het op mijn manier doet moet je ook nog wat nadenken.

ik bedoel: gebruik de breedte/hoogte van het scherm om het form in het midden te krijgen rekening houdend met de breedte en hoogte van het form. en dan in te vullen bij form1.left en form1.top

maar ik vindt het eigenlijk niet nuttig, omdat je dat voor een form toch niet zult gebruiken. voor componenten wel, maar het gaat hier om de oncreate te testen dus maakt het niet uit wat je doet :?

veel leuker is het om bv in je oncreate dingen aan te roepen die nog niet bestaan. dan heb je dat dus ook geleerd :)

edit: om dat NIET te gebruiken omdat het dus niet kan :)
Wat je hier vertelt snap ik de ballen van om eerlijk te zijn..... ik krijg het nog niet eens voor elkaar om code te maken die ervoor zorgt dat Form1 gecentreerd wordt bij het starten van de applicatie. Brrrr... morgenochtend weer.... ik ben kapot, ga slapen :)

Verwijderd

Topicstarter
ah wacht... ok... ik snap wat je bedoelt...
maar wat ik bedoel is dus zonder dat ik in de property lijst aangeef via een muisklik dat de position van Form1 op PoDesktopCenter komt te staan, maar dat ik dat via een stukje code doe... Maar hoe kan ik tegen delphi zeggen dat hij bij het creeren van Form1 het ding moet centreren (dus zonder dat ik dat met muisklik aangeef in de lijst, maar het in de code type zodat hij dat uitvoert) -> en het dus waarschijnlijk ook in de property lijst gewijzigd wordt maar dan door de code ipv door ikke met mijn muisklik.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 21:18

Tomatoman

Fulltime prutser

Hint 1
In iedere applicatie is het variabele Screen gedefinieerd, die een object van het type TScreen is. Zoek in de Delphi helpfiles maar eens op welke property's een TScreen object heeft.

Hint 2
Zoek de GetSystemMetrics functie op in de Helpfiles.

Hint 3
code:
1
2
3
4
5
6
7
8
9
type
  PRect = ^TRect;
var
  DesktopRect: PRect;
begin
  if SystemParametersInfo(SPI_GETWORKAREA, 0, DesktopRect, 0) then
    ShowMessage('Schermhoogte exclusief taakbalk: ' + 
      IntToStr(DesktopRect.Bottom - DesktopRect.Top));
end;

Een goede grap mag vrienden kosten.


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 24 augustus 2002 @ 23:51:
ah wacht... ok... ik snap wat je bedoelt...
maar wat ik bedoel is dus zonder dat ik in de property lijst aangeef via een muisklik dat de position van Form1 op PoDesktopCenter komt te staan, maar dat ik dat via een stukje code doe... Maar hoe kan ik tegen delphi zeggen dat hij bij het creeren van Form1 het ding moet centreren (dus zonder dat ik dat met muisklik aangeef in de lijst, maar het in de code type zodat hij dat uitvoert) -> en het dus waarschijnlijk ook in de property lijst gewijzigd wordt maar dan door de code ipv door ikke met mijn muisklik.
Dubbel klik op het Form (of gebruik de property editor om een OnCreate functie aan te maken voor het form) En zet daar de code in

Position := poScreenCenter;

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Hopelijk de oplossing :)

project1.dpr ziet er zo uit
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
program Project1;

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

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  Form1.OnCreate := Form1.FormulierProductieGebeurtenis;
end.



enne

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    procedure FormulierProductieGebeurtenis(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;



implementation

procedure Creatie;
begin

end;

{$R *.DFM}

procedure TForm1.FormulierProductieGebeurtenis(Sender: TObject);
begin
    Form1.Left := (Screen.Width - Form1.Left) div 2;
    Form1.Top := (Screen.Height - Font.Handle) div 2;
end;

end.
//Deze code werd speciaal voor GoT geschreven door Recon   (8>


Was me wel effe zoeken maak 't is me dan ook gelukt :O

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Een form heeft toch gewoon een Position property. Of is dat niet wat je zoekt?

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


  • MisterE
  • Registratie: April 2002
  • Laatst online: 28-08 19:15
code:
1
2
DDMainForm.Left := IniRead.ReadInteger ('General','DDMainForm.Left', ((Screen.Width  div 2)-(DDMainForm.Width  div 2)) );
    DDMainForm.Top  := IniRead.ReadInteger ('General','DDMainForm.Top',  ((Screen.Height div 2)-(DDMainForm.Height div 2)) );

Verwijderd

Topicstarter
Tnx voor de hulp allemaal, het is gelukt!
kwist dat het moest kunnen zoals lordlarry beschreef, kwas alleen ff kwijt dat je op het form moest dubbelklikken ;)

Kwist niet dat er nog zoveel andere manieren waren om hetzelfde te doen ;)
Pagina: 1