[ milan_kol @ 08.11.2004. 12:14 ] @
1) kako da postavim misa na tacno odredjenu poziciju? probao sam sa mouse.CursorPos.x:=100; ali nece? zasto?

2) kako da napravim na formi, kao sto win ima, da se selektuje vise stvari, znaci, klikne se misem, i vuce se, a stvara se pravougaonik, i sve sto potpadne pod taj pravougaonik da je selektovano? mene ustvari interesuje samo pravougaoni,, ja sam kao nesto slicno uradio, ali prvi put je ostavljalo crno svuda za sobom, a drugo je mnogo treperelo :)

Pozdrav&hvala
[ sasas @ 08.11.2004. 12:48 ] @
1) WinAPI: SetCursorPos(x, y); x, y = screen coordinates

2) Self.Canvas.DrawFocusRect(r: TRect);

Otprilike ovako, na brzinu (da bi zaista radilo treba malo da se zezas s ovim top/bottom i left/right, ovako radi samo u slucaju da vuces misa s leva nadesno i odozgo prema dole):

Code:


var
  r: TRect;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 r.Top := y;
 r.Left := x;
 r.Bottom := y;
 r.Right := x;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ssLeft in shift then
  begin
    self.Canvas.DrawFocusRect(r);
    r.Bottom := y;
    r.Right := x;
    self.Canvas.DrawFocusRect(r);
  end;
end;



Naravno, treba i na mouse up da se obrise selekcija.

ss.
[ milan_kol @ 09.11.2004. 12:19 ] @
hvala za misa

ovo sa focusRect je otprilike to, ali nije tacno ono sto sam mislio! treba ja da napravim - nacrtam taj pravougaonik, trebaju ivice da mu budu u boji (plave boje) i deblje od ovog focusRecta... da li je to moguce napraviti? kao sto sam vec rekao, problem je samo u tomesto trepuce ako uradim na jedan nacin, a ako uradim na drugi, ostaje plavo po formi :( ? kako to da resim?
[ bancika @ 09.11.2004. 18:25 ] @
probaj da promenis Canvas.Pen.Width i Canvas.Pen.Color za okvir i Canvas.Brush.Color za boju unutrasnjosti. to je za obicne Rect, valjda radi i ovde :)
[ sasas @ 09.11.2004. 19:33 ] @
Citat:
bancika: to je za obicne Rect, valjda radi i ovde


Na zalost nece da radi. FocusRect se crta sa XOR copy mode-om. Mozes crtati tako i obicni rect, ali XOR ce da ti zeza boje pravougaonika (u zavisnosti na kakvoj pozadini ih crtas).

Ako ti je bas stalo do plavih debelih linija, moraces da ih crtas nekako rucno. Za izbegavanje treperenja mozes pogledati twincontrol.doublebuffered property (delphi 7). Nisam siguran da ce ti raditi na svim windowsima, ako ne radi mozes uvek sam napraviti isto to pomocu winapija.

I da, windows posle toliko godina nema vsync koji je na kucnim racunarima postojao u doba spekija (i ranije), a koji bi ti sad tako dobro dosao.

ss.
[ Almedin @ 09.11.2004. 20:32 ] @
Po čemu crtaš plavi okvir? Ovo bi moglo da se uradi slično kako je 'sasa' na pisao samo što umjesto korištenja XOR moda za brisanje prijašnjeg pravougaonika uradiš invalidate za prethodni pravougaonik. Da bi izbjegao treperenje invalidate uradiš za svaku liniju posebno a ne za čitav pravougaonik tako da se ponovo iscrta samo područje gdje su linije. Ako invaliduješ linije u pixel tačno, treperenje nećeš primijetiti.
[ milan_kol @ 11.11.2004. 22:10 ] @
crtam bas po formi! ne moze da se brise u pixel tacno, probao sam, ako korisnik cimne misa brzo, win ne uhvati svaki pixel preko koga je mis stvarno presao, nego samo neke... zato ostaje trag iza pravougaonika! jos neko resenje? zaista me ubi ovo :(
[ Almedin @ 11.11.2004. 22:37 ] @
To što Windows ne registruje pomak za svaki pixel nema veze sa ovim. Ti zabilješić zadnju registrovanu poziciju i kod sljedeće pozicije brišeš zadnju registrovanu tako da nema veze kako win registruje pomak. Pošalji malo koda koji si koristio.