problem z maksymalizacją

0

chyba banalny, ale cóż, nie mogęsobie poradzić.

oto moja procedura maksymalizyjąca okno programu

procedure TMain.Image13Click(Sender: TObject);
begin
//jeśli już nie zmaksymalizowane
  if Image13.Tag = 0 then
     begin
     Image13.Tag := 1;
     Panel7.Visible:=false; 
     Image13.Picture.Bitmap := Image16.Picture.Bitmap;
//dane dla 'przywróć'
     Image15.Tag := Width;
     Image16.Tag := Height;
     Image8.Tag := Left;
     Image9.Tag := Top;
//maksymalizuj
     SetBounds(0, 0,Screen.WorkAreaWidth,Screen.WorkAreaHeight);
     end
  else
     begin
//pozwól maksymalizować
     Image13.Tag := 0;
     Panel7.Visible:=true;
     Image13.Picture.Bitmap := Image15.Picture.Bitmap;
//przywróć
     SetBounds(Image8.Tag,Image9.Tag,Image15.Tag,Image16.Tag);
     end;
end;

i to działa.
problem w tym, że jak odczytuję opcje w OnCreate formy, i chcę ustawić okno w takiej pozycji w jakiej było przy zamykaniu programu, to nie wypełnia ono takiego obszaru jak powinno, nie takiego jak wypełnia gdy już podczas działania programu maksymalizuję je. dopiero jak zmienię rozmiar paska zadań windows i przywrócę go z powrotem do takiego stanu jak był zanim go zmieniłem (ehh) to jest ok.
szukałem już na forum, próbowałem rad które znalazłem, ale bez rezultatu.
ani przez align, ani przez system metrics. podejrzewam że chodzi o nieszczęsne BorderStyle=bsNone formy Main.
help me please.

0

A powiedz dlaczego nie chcesz skożystać z normalnej funkcji maksymalizującej okno czyli z WindowState := wsMaximized;.... ?

0

zaraz sprawdzę dlaczego, bo coś mi się wydaje że tego też próbowałem.
[EDIT]
w moim przypadku (jeśli nie generalnie, ale w tym momencie mnie to nie interesuje), takie przypisanie nie uwzględnia paska narzędzi w ogóle, po prostu wywala się forma na cały ekran.

0
snw napisał(a)

zaraz sprawdzę dlaczego, bo coś mi się wydaje że tego też próbowałem.
[EDIT]
w moim przypadku (jeśli nie generalnie, ale w tym momencie mnie to nie interesuje), takie przypisanie nie uwzględnia paska narzędzi w ogóle, po prostu wywala się forma na cały ekran.

Nie wiem za bardzo co chcesz zrobić z paskiem narzędzi...
Jeżeli chcesz go ukryć albo autoukryć to ... chyba napisałem kiedyś post na temat jak to zrobić.. Napisz więcej to postaram ci się pomóc

0

no jak to co, chcę żeby go było widać :) ! chcę normalnie zmaksymalizować okno, a ono albo przyjmuje koordynatu CAŁEGO ekranu, albo pozycję o kilkadziesiąt pikseli za niską (tzn odstaje od górnej krawędzi - zamiast (0,0) jakieś np (30,0) ale nie mierzyłem). jak już napisałem, okno jest typu bsNone (BorderStyle)...

0

Wiesz co... powiem ci tak jak kiedyś taki fajny koleś (MisiekD) napisał w odpowiedzi na posta:

Ustaw sobie WindowState na wsmaximized, zaglądnij do (TSizeConstraints)i wyłącz autoukrywanie paska narzędzi lub zaznacz "zawsze nawierzchu"

Najpierw przeczytaj, potem pomyśl, potem jeszcze raz przeczytaj i jeszcze raz pomyśl ... i gotowe :d

0
snw napisał(a)
//maksymalizuj
     SetBounds(0, 0,Screen.WorkAreaWidth,Screen.WorkAreaHeight);

zauważ, że nie wszyscy mają pasek na dole (np. ja mam na górze :P )

a tak swoją drogą

Form.WindowState := wsMaximized;

dla bsDialog lub bsNone rzeczywiście nie zadziała tak po prostu, ale wystarczy pomyśleć i przed

Form.WindowState := wsMaximized;

zrobić

Form.Constraints.MaxHeight := Screen.WorkAreaHeight;

Proste, łatwe i przyjemne i nie trzeba pamiętać rozmiaru i koordów aby zrobić przywróć

A wszystko to jest w google!!!!

0

zauważ, że nie wszyscy mają pasek na dole (np. ja mam na górze )

Ty wiesz, że racja.
;)
widzę że nawet fajny koleś włączył się żeby pomóc :) , dzięki !
problem w tym...że to też nie działa. nawet widać, że forma na chwilę zajmuje żądaną pozycję, po czym od niej (!) odskakuje.
akurat ja mam dwa paski zadań btw, ale czy go usunę ten górny czy nie, dam 'zawsze na wierzchu' czy nie, zawsze dzieje się tak samo. w OnResize formy nic nie ma, jakby coś. może zrobię screeny ?
(ale samo wsMaximized działa, tylko jak już napisałem - na cały ekran)

0

dziwne, u mnie działa zarówno przy BorderStyle bsNone jak i bsDialog, tyle że pasek nie może być autoukrywany

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    shp1: TShape;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
  Constraints.MaxHeight := Screen.WorkAreaHeight;
  WindowState := wsMaximized;
  Top := Screen.WorkAreaTop;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
  WindowState := wsNormal;
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
  Close;
end;

end.

tu masz screeny

BorderStyle = bsDialog
BorderStyle = bsNone

0

już działa. oświeciło mnie żeby sprawdzić Form.Position.
[sciana] [sciana] [sciana]
dzięki za odezw...

1 użytkowników online, w tym zalogowanych: 0, gości: 1