Avatar billede jaweni Nybegynder
09. januar 2004 - 13:33 Der er 14 kommentarer og
2 løsninger

To (2) forms overdækkende hinanden.

Hvordan får jeg to forms til fuldstændig
at dække hinanden?

Form2 skal dække Form1. Har prøvet med: Form1's placering, osv., men det virker
ikke. Øverste kant af Form2 skjuler nederste
del af Form1's caption.

Form1 og Form2 må hverken kunne flyttes,
minimeres, maximeres, ændre størrelse,
osv.

Minimeres Form2, så skal også Form1 minimeres
Avatar billede borrisholt Novice
09. januar 2004 - 13:58 #1
Er det ikke bare at gjerne Caption baren på form 2 ?
Avatar billede borrisholt Novice
09. januar 2004 - 13:58 #2
gjerne = fjerne
Avatar billede jaweni Nybegynder
10. januar 2004 - 05:38 #3
Det virker nu. Det var åbenbart en fejl
ved min Delphi; men så er der kun 1 ting
tilbage.

Hvad gør jeg for at få begge forms til at
blive på den fastlagte position
(OnScreenCenter), så de ikke kan flyttes?
Avatar billede stefmeister Nybegynder
12. januar 2004 - 19:00 #4
De må ikke kunne flyttes af brugeren?
Det er ikke så svært, det er bare at gå ind og sætte align til alCustom, så kan man ikke flytte vinduet. Hvis det var det du var ude efter?
Avatar billede stefmeister Nybegynder
12. januar 2004 - 19:01 #5
Ups... som et svar
Avatar billede stefmeister Nybegynder
12. januar 2004 - 19:01 #6
Er du stadig ude efter at når man minimere form1 så skal form2 også minimeres, eller har du fået løst det problem?
Avatar billede jaweni Nybegynder
13. januar 2004 - 12:57 #7
Ja tak, gerne
Avatar billede jaweni Nybegynder
13. januar 2004 - 19:31 #8
Hvilken Delphi-version bruger du? For jeg kan ikke
finde noget med Align under Properties i Delphi 2.

Kan jeg gøre noget andet for at få Form1 og Form2
til at fryse fast på positionen?

Jeg har sat BorderStyle til bsNone for så kan formen
ikke flyttes; men Formens Caption forsvinder.
Som erstatning har jeg indsat et panel i formens top.
Men det er jo ikke helt det samme.
Avatar billede stefmeister Nybegynder
13. januar 2004 - 22:01 #9
Her er funktionen så man ikke kan flytte vinduet

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Align := alCustom;
end;
Avatar billede stefmeister Nybegynder
13. januar 2004 - 22:01 #10
Hvis dette ikke virker så prøv denne:

unit FreezeForm;

interface

uses
  Windows, Messages, Classes, Graphics, Forms, Controls, Buttons,
  StdCtrls, ExtCtrls;

type
  TFrmFreeze = class(TForm)
    BtnValidate: TBitBtn;
    BtnSave: TBitBtn;
    BtnPreview: TBitBtn;
    BtnPrint: TBitBtn;
    BtnExit: TBitBtn;
    BtnHelp: TBitBtn;
    procedure BtnExitClick(Sender: TObject);
  private
    FOldWindowProc: TWndMethod;  {Old WindowProc}
    {Window subclassing methods}
    procedure HookForm;
    procedure UnhookForm;
    procedure WndProcForm(var AMsg: TMessage);
  protected
    procedure CreateWnd; override;
  public
    destructor Destroy; override;
  end;

var
  FrmFreeze: TFrmFreeze;

implementation

{$R *.DFM}

procedure TFrmFreeze.CreateWnd;
begin
  inherited;
  if csDesigning in ComponentState then
    Exit;  {Don't need to hook when designing}
  if Enabled then
  begin
    HookForm;  {Hook the main form's Window}
  end;
end;


procedure TFrmFreeze.HookForm;
begin
  if csDesigning in ComponentState then
    Exit;
  FOldWindowProc := WindowProc;
  WindowProc := WndProcForm;
end;


procedure TFrmFreeze.UnhookForm;
begin
  if csDesigning in ComponentState then
    Exit;
  {If we are "hooked" then undo what Hookform did}
  if Assigned(FOldWindowProc) then
  begin
    if HandleAllocated then
    begin
      WindowProc := FOldWindowProc;
    end;
    FOldWindowProc := nil;
  end;
end;


{WndProcForm is our replacement for our WindowProc. We grab any Windows messages
that we need here}
procedure TFrmFreeze.WndProcForm(var AMsg: TMessage);
var
  cmdType: Word;
begin
  if Enabled then
  begin
    case AMsg.Msg of
      WM_SYSCOMMAND:
      begin
        cmdType := AMsg.WParam and $FFF0;
        case cmdType of
          SC_MINIMIZE, SC_MAXIMIZE, SC_MOVE, SC_SIZE:
            Exit;
        end;
      end;
      WM_GETMINMAXINFO:
        Exit;
    end;
  end;
  {Call the default windows procedure}
  FOldWindowProc(AMsg);
end;


destructor TFrmFreeze.Destroy;
begin
  if not (csDesigning in ComponentState) then
    UnhookForm;  {Stop interfering ...}
  inherited Destroy;
end;


procedure TFrmFreeze.BtnExitClick(Sender: TObject);
begin
  Close;
end;

end.
Avatar billede stefmeister Nybegynder
13. januar 2004 - 22:05 #11
Vil du have at den skal minimere vinduerne hvis du trykker på minimer knappen i hjørnet, eller vil du have en knap der kan minimere begge...

Denne funktion minimere begge vinduer:

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Minimize;
end;
Avatar billede stefmeister Nybegynder
13. januar 2004 - 22:06 #12
hvis man lukker form1 skal form2 så også lukkes?
Avatar billede jaweni Nybegynder
15. januar 2004 - 07:55 #13
Hej stefmeister,

1) jeg kan ikke bruge Form1.Align := alCustom; i Delhpi2,
for muligheden er der ikke.

2) jeg forstår ikke koden i dit eksempel. Kan du ikke sende
et eksempel med alle relevante filer: *.dpr, *.dfm, *.pas
osv. i en zip-fil til: juwain03@yahoo.dk?

Ellers har jeg fundet en anden løsning, som kan bruges til
mit behov:

Når Form2 aktiveres fra Form1 ved knaptryk, minimeres
Form1 (Form1.WindowState := ws.Minimized;).

Form1 kan igen ses, når Form2 lukkes ved knaptryk:
(Form1.WindowState := ws.Normal;).
Avatar billede stefmeister Nybegynder
15. januar 2004 - 16:32 #14
jeg har ikke noget exempel så det kan jeg desværre ikke...!
Avatar billede jaweni Nybegynder
15. januar 2004 - 18:25 #15
Hej igen,
så kom jeg ikke videre ad den vej; men
jeg vil bruge løsningen jeg skrev om i
morges.

Jeg håber, at det er OK, at vi deler
points 50-50?
Avatar billede stefmeister Nybegynder
15. januar 2004 - 19:38 #16
det er da helt iorden...! skulle det være en anden gang :D


Stefmeister.
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