Avatar billede stone Forsker
18. april 2000 - 10:46 Der er 3 kommentarer og
2 løsninger

bevæge paneler 1

til spørgsmålet http://www.eksperten.dk/spm.asp?id=15364

panelerne må ikke bevæge sig uden for formen.
Avatar billede sjensen Nybegynder
18. april 2000 - 11:23 #1
stone,

i den rutine der sætter panel.left = +1 eller -1 skal du så teste på at left ikke bliver 0 eller mindre for det panel der bevæger sig til venstre og max.width - panel.width for den der bevæger sig mod højre.

Men, 2 spm:

1. vil du have det sådan at panelerne altid har samme størrelse og så bevæger sig fra midten ud mod siderne, så langt de kan, eller
2. skal det være 2 paneler der starter med at dække hele fomen og så bevæger sig mod højre og venstre som et tæppe der bliver trukket til side ?

jeg kan lave dig et lille program hvis du har lyst ?
Avatar billede psv Nybegynder
18. april 2000 - 11:37 #2
Hejsa... Jeg har lavet en form med
2 timere (een til at åbne - FOpenTimer og een til at lukke FCloseTimer)
3 knapper (FOpenButton, FStopButton og FCloceButton
& 2 paneler (FLeftPanel og FRightPanel)

Panelerne placeres så de er lukkede Align=alNone og timerne sættes til enabled=flase når app. starter.

Panelerne flyttes ikke men laves smallere når døren åbnes. Når der er lukket helt op stoppes timeren igen.

Open-knappens OnClick

procedure TForm1.FOpenButtonClick(Sender: TObject);
begin
  FCloseTimer.Enabled := False;
  FOpenTimer.Enabled := True;
end;

Her kommer det der skal ske når lukke op timeren fyrer. Bemærk LockWindowUpdate som forhindrer at formen "flimrer" når panelerne skifter størrelse.

procedure TForm1.FOpenTimerTimer(Sender: TObject);
begin
  LockWindowUpdate(Self.Handle);
  try
    if (FLeftPanel.Width > 0) or (FRightPanel.Width > 0) then
    begin
      if FLeftPanel.Width > 0 then
        FLeftPanel.Width := FLeftPanel.Width-1;
      if FRightPanel.Width > 0 then
      begin
        FRightPanel.Width := FRightPanel.Width-1;
        FRightPanel.Left := FRightPanel.Left+1;
      end;
    end
    else
      FOpenTimer.Enabled := False;
  finally
    LockWindowUpdate(0);
  end;
end;

Der er selvf. en knap til at lukke igen... Stopper åbne-timeren of starter lukke-timeren.

procedure TForm1.FCloseButtonClick(Sender: TObject);
begin
  FOpenTimer.Enabled := False;
  FCloseTimer.Enabled := True;
end;

Stop begge timere. Døren står nu stille.

procedure TForm1.FStopButtonClick(Sender: TObject);
begin
  FOpenTimer.Enabled := False;
  FCloseTimer.Enabled := False;
end;

Endelig handleren til lukke-timeren.

procedure TForm1.FCloseTimerTimer(Sender: TObject);
begin
  LockWindowUpdate(Self.Handle);
  try
    if ((FLeftPanel.Left + FLeftPanel.Width) <= FRightPanel.Left) then
    begin
      if FLeftPanel.Width < FRightPanel.Left then
        FLeftPanel.Width := FLeftPanel.Width + 1;
      if (FRightPanel.Width < (FLeftPanel.Left + FLeftPanel.Width)) then
      begin
        FRightPanel.Left := FRightPanel.Left - 1;
        FRightPanel.Width := FRightPanel.Width + 1;
      end;
    end
    else
      FCloseTimer.Enabled := False;
  finally
    LockWindowUpdate(0);
  end;
end;
Avatar billede stone Forsker
18. april 2000 - 18:59 #3
Sjensen:
2 Paneler skal have samme størrelse, og skal gå fra midten af formen ud til slutningen af formen.Som et tæppe som bliver trukket fra.
psv:
Dit eksempel ser interesant ud, men ikke lige det jeg skal bruge.
Avatar billede psv Nybegynder
19. april 2000 - 09:04 #4
Nu er det jeg undrer mig lidt :-)

Min kode laver præcis det du vil have!!! 2 paneler der glider fra hinanden som et tæppe!!!
Avatar billede stone Forsker
19. april 2000 - 23:11 #5
psv.
du har ret.
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