Avatar billede cope21 Nybegynder
15. januar 2000 - 15:52 Der er 11 kommentarer og
1 løsning

Form størrelse / Flere forms

Jeg er lige lidt besværlig, så jeg har 2 spørgsmål:

1. Hvordan fastsætter man programskærmens størrelse, så det ikke er muligt for brugeren at trække den større... maximize osv?

2. Hvis jeg har programmet åben, og ved tryk på ButtonInfo skal der poppe en lille mere op ovenpå ligesom ved About i de fleste programmer? Skal man oprette 2 forms? Hvordan gør man?
Avatar billede koonz Nybegynder
15. januar 2000 - 16:01 #1
1.

I Din object inspector, væler du formen. lad os antage name er Form1

herefter vælger du fanebladet events, og finder OnResize, her klikker du, og laver følgende kode.
Form1.Width := 200;
Form1.Height := 200;

Du kan selfølgelig erstatte 200, med den størrelse du ønsker !

2. Ja - du skal lave en ny form - lad os antage den hedder Form2

Lav en knap på Form1, og dobbeltklik på den - kod så følgende

Form2.Showmodal;

Hvis du skal lave en luk knap på form tå - er det samme procedure, her skriver du bare

Form2.Close;


Avatar billede cope21 Nybegynder
15. januar 2000 - 16:18 #2
Den form den skal åbne hedder opret.pas... den der allerede er aktiv hedder bare Unit1.pas.

Men den vil ikke compile det.

procedure TMainForm.ButtonKundeOpretClick(Sender: TObject);
begin
  Opret.Showmodal;
end;

Undeclared identifier: 'Opret'.

Howcome? Ja jeg ved jeg er newbie.. hehe
Avatar billede koonz Nybegynder
15. januar 2000 - 16:42 #3
Hvis du klikker på din form, og derefter kigger i objectinspector til venstre, hvad hedder din form så (se under name) det er det du skal skriv, før Showmodal

Den hedder højest sansunlig Form2, hvis du ikke selv har kaldt den noget

Form2.Showmodal;
Avatar billede cope21 Nybegynder
15. januar 2000 - 16:57 #4
I får lige lidt kode... så kan I se...
Den aktuelle form hedder Mainform (Unit1.pas) og den anden FormOpret (opret.pas)

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Gauges, Menus, ComCtrls, StdCtrls, Db, DBTables,opret;

type
  TMainForm = class(TForm)
    StatusBar1: TStatusBar;
    PageControl1: TPageControl;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Afslut1: TMenuItem;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    GroupBoxBog: TGroupBox;
    ComboBoxFirma: TComboBox;
    LabelBogKunde: TLabel;
    LabelBogAmount: TLabel;
    EditBog: TEdit;
    CheckBoxClean: TCheckBox;
    CheckBoxWindows: TCheckBox;
    ButtonBogOk: TButton;
    ButtonBogRyd: TButton;
    GroupBoxKunde: TGroupBox;
    LabelKunde: TLabel;
    ButtonKundeOpret: TButton;
    ButtonKundeRediger: TButton;
    ButtonKundeSlet: TButton;
    LabelKundeOpret: TLabel;
    LabelKundeRediger: TLabel;
    LabelKundeSlet: TLabel;
    GroupBoxEngang: TGroupBox;
    LabelEngangKunde: TLabel;
    LabelEngangAdresse: TLabel;
    LabelEngangPostnr: TLabel;
    LabelEngangBy: TLabel;
    EditEngangKunde: TEdit;
    EditEngangAdresse: TEdit;
    EditEngangPostnr: TEdit;
    EditEngangBy: TEdit;
    LabelEngangAmount: TLabel;
    EditEngangAmount: TEdit;
    CheckBoxEngangClean: TCheckBox;
    CheckBoxEngangWindows: TCheckBox;
    ButtonEngangOk: TButton;
    ButtonEngangRyd: TButton;
    LabelBog: TLabel;
    Label1: TLabel;
    GroupBoxLejerbo: TGroupBox;
    LabelLejerbo: TLabel;
    ButtonLejerboOk: TButton;
    ButtonLejerboRyd: TButton;
    GroupBoxUdskriv: TGroupBox;
    LabelUdskrivKunde: TLabel;
    ComboBoxUdskrivKunde: TComboBox;
    LabelUdskriv: TLabel;
    Label2: TLabel;
    EditUdskrivPeriode: TEdit;
    Label3: TLabel;
    EditUdskrivKr: TEdit;
    LabelUdskrivMoms: TLabel;
    EditUdskrivFatura: TEdit;
    ButtonUdskrivUdskriv: TButton;
    ButtonUdskrivRyd: TButton;
    About1: TMenuItem;
    About2: TMenuItem;
    Database1: TDatabase;
    Table1: TTable;
    procedure Afslut1Click(Sender: TObject);
    procedure ButtonUdskrivUdskrivClick(Sender: TObject);
    procedure ButtonKundeOpretClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}


procedure TMainForm.Afslut1Click(Sender: TObject);
begin
  application.terminate;
end;

procedure TMainForm.ButtonKundeOpretClick(Sender: TObject);
begin
  FormOpret.Showmodal;
end;

procedure TMainForm.FormResize(Sender: TObject);
begin
  MainForm.Width:=411;
  MainForm.Height:=480;
end;

End.



opret.pas ser sådan ud:



unit opret;

interface

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

type
  TFormOpret = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    EditOpretKunde: TEdit;
    EditOpretAdresse: TEdit;
    EditOpretPostnr: TEdit;
    EditOpretBy: TEdit;
    EditOpretDefValue: TEdit;
    ButtonOpretOk: TButton;
    ButtonOpretCancel: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormOpret: TFormOpret;

implementation

{$R *.DFM}

end.


Men når jeg kører programmet, kommer den med denne error, når jeg trykker på Opret knappen:

Project HK.exe raised exception class EAccessViolation with message: 'Acces violation at address 00428A2F in module 'HK.exe'. Read of address FFFFFFFF'. Process stopped
Avatar billede koonz Nybegynder
15. januar 2000 - 17:11 #5
Du skal hav FormOpret medi din uses for FormMain

enten ved at tilføje den selv, eller ved at vælge den i object inspec. og så vælge (use unit) under filer

var
  MainForm: TMainForm;

implementation

uses FormOpret;          <----------

{$R *.DFM}


procedure TMainForm.Afslut1Click(Sender: TObject);
begin
  application.terminate;
end;

Avatar billede koonz Nybegynder
15. januar 2000 - 17:13 #6
Prøv at compile på ctrl+F9

så får du dine compiler fejl istedet for "bare" at køre programmet
Avatar billede cope21 Nybegynder
15. januar 2000 - 17:23 #7
Jeg har den jo med....

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Gauges, Menus, ComCtrls, StdCtrls, Db, DBTables,opret;


så hvorfor hulen virker det ikke?
Avatar billede koonz Nybegynder
15. januar 2000 - 17:35 #8
Prøv lige at sende mig hele programmet på

vadstrup@post12.tele.dk

hvis jeg skal kigge på det
Avatar billede lrj Nybegynder
16. januar 2000 - 03:12 #9
Det du skal skrive er
FormOpret.showmodal;

da der i opret.pas er defineret en variabel:

var
  FormOpret: TFormOpret;

Og det er den du gerne vil vise. All there is to it :)
Avatar billede sjensen Nybegynder
16. januar 2000 - 08:56 #10
Hej Cope21,

Svar på første spørgsmål:

1. Klik på selve formen

2. I object Inspector dobbeltklikker du på linien "BorderIcons" og herefter vælger du FALSE for punkterne: biMimimize og biMaximize. Derved forsvinder de to ikoner i formens øverste højre hjørne (ved siden af "lukke" krydset)

3. I linien BorderStyle vælger du bsSingle. Derved kan formen ikke trækkes og på den måde gøres større eller mindre.

4. Hvis du desuden ønsker at fjerne nogle af de menupunkter der er i den menu der fremkommer når du dobbeltklikker på programikonet (øverste venstre hjørne) skal du i formens OnCreate event tilføje en eller flere af følgende linier:

  SystemMenu          := GetSystemMenu(Handle, False);
  DeleteMenu(SystemMenu, SC_TASKLIST, MF_BYCOMMAND);
  DeleteMenu(SystemMenu, 7, MF_BYPOSITION);
  DeleteMenu(SystemMenu, 5, MF_BYPOSITION);
  DeleteMenu(SystemMenu, SC_MAXIMIZE, MF_BYCOMMAND);
  DeleteMenu(SystemMenu, SC_MINIMIZE, MF_BYCOMMAND);
  DeleteMenu(SystemMenu, SC_SIZE, MF_BYCOMMAND);
  DeleteMenu(SystemMenu, SC_RESTORE, MF_BYCOMMAND);
  DeleteMenu(SystemMenu, SC_MOVE, MF_BYCOMMAND);

På denne måde sikrer du dig at brugeren ikke kan ændre størrelse, eller minimere eller maximere dit program.

Vedr. spørgsmål 2:

Du kan vælge at oprette og vise endnu en form, og til dette skal du så bruge showmodal (sådan som det fint er beskrevet ovenstående), men afhængig af dit behov kunne du vælge at påføre et panel, f.eks. i centrum af din form, tilføje de felter du vil have på dette panel og i formcreate sætte panel.visible := false; Dette skjuler det. Når du så vil "poppe det op" sætter du bare panel.visible := true; og har derefter felterne til rådighed. Dette sparer dig for en form, men jeg vil ikke anbefale denne løsning hvis der er med flere felter og f.eks. med database adgang. Så skal du bruge en anden form. Men til f.eks. en aboutbox er det ok.

NB! Bemærk følgende ved brug af en anden form:

Når du til dit projekt tilføjer en ny form (enten via New Form menupunktet) eller hvis du allerede har formen, via Add to Project menupunktet, så tilføjes formen dit project, og bliver "created" sammen med hovedformen. D.v.s. at når du kalder din form vil dens FormCreate event IKKE blive kaldt, fordi formen jo allerede er skabt. Til gengæld udføres denne event 1 gang og der er når programmet startes. For at undgå dette skal du gøre fælgende:

Vælg Project, Options, Forms. Klik på formen navn i venstre side og klik på pil til højre. Derved flyttes formnavnet over i kolonnen med "available forms".

NB! Du kan også bare fjerne den linie i projektfilen (ditprog.dpr) der ser sådan ud:

Application.CreateForm(Tminform, minform);

Du skal så huske lige inden du kalder showmodal følgende:

minform := tminform.create(application);
try
  minform.showmodal;
finally
  minform.free;
end;

Hvis du vil vide om minform blev afsluttet med OK eller CANCEL kan du skrive:

  if Minform.Showmodal = mrOK then
  begin
    // ok trykket
  end else
  begin
  // cancel trykket
  end;

imellem hhv. try og finally.

Go' fornøjelse

sjensen
Avatar billede lrj Nybegynder
16. januar 2000 - 20:49 #11
Sikke en omgang for 30 points ;o)
Avatar billede delphi Nybegynder
18. januar 2000 - 14:22 #12
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester