przenoszenie okna

0

Mam pytanie odnośnie zakładki BorderStyle. Jeśli ustawie ją na bsNone to znika mi ten górny pasek, i nie moge przenosić okna. Co zrobić żeby dało sie przenosić, po kliknięciu na forme ??

0

Popatrz do faq :)

0

Pochwalony!
Można to zrobić na kilka sposobów.

  1. Komunikat APi:

SendMessage(Form1.Handle, WM_SYSCOMMAND, $F012, 0);
{lub}
TWinControl(Form1).Perform(WM_SYSCOMMAND, $F012, 0); // noł różnica

  1. Własnym kodem.
    Przy tym jest więcej pracy:
    -do OnMouseDown dopisz taki kod:

Clicked := True;
Punkt := Point(X, Y);

-do OnMouseUp dopisz taki kod:

Clicked := False;

-do OnMouseMove dopisz taki kod:

if Clicked then
begin
Left := Left - (Punkt.X - X);
Top := Top - (Punkt.Y - Y);
end;

-zmień wartość sekcji VAR (nad napisem implementation :) ) taki kodzik:

var
Form1: TForm1;
Clicked: Boolean;
Punkt: TPoint;

i to na tyle :)

0

Można również obsłużyć komunikat WM_NCHITTEST. Przykładowy kod (nie napisałeś, w jakim to ma być języku, więc wybrałem ten lepszy :-P ):

Plik *.h
 public:
  void __fastcall MoveIt(TMessage &Msg);

Plik *.cpp
void __fastcall TFDiskFree::MoveIt(TMessage &Msg)
{TForm::Dispatch(&Msg);
 if (Msg.Result == HTCLIENT) Msg.Result = HTCAPTION;
}

0

hmmm ja nielubie komunikatów wole sposoby może i wolniejsze ale łatwe!

0

hmmm ja nielubie komunikatów wole sposoby może i wolniejsze ale łatwe!

Spójrz na długość kodów i na to, co przedstawiają. Czy naprawdę uważasz, że "mój" sposób jest trudniejszy?
Ja odbieram komunikat, który jest wysyłany do okna w celu zidentyfikowania miejsca kliknięcia myszą i jeśli jest to obszar klienta, to zwracam taką wartość, aby system myślał, że użytkownik kliknął na Caption. Wówczas Windows sam obsłuży przenoszenie okna (ja nie muszę pisać kodu, który jest odpowiedzialny za poruszanie oknem, bo wykorzystuję to, że twórcy Windozy zrobili to za mnie).

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