Avatar billede osa Nybegynder
02. april 2001 - 20:09 Der er 5 kommentarer og
1 løsning

DBGrid


Hvordan skal proceduren se ud for at virke?

procedure TBilledeForm2.Image1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin
    WITH Table1 do
    begin

    A := DBGrid1.Fields[3].AsInteger;
    B := DBGrid1.Fields[4].AsInteger;
    C := DBGrid1.Fields[5].AsInteger;
    D := DBGrid1.Fields[6].AsInteger;
    if ((x > A) and (x < B)) and ((y >C)  and (y < D))then  Label1.Caption:=TelefonListeForm.DBGrid1.Fields[1].AsString;

    end;
Avatar billede nico26 Nybegynder
02. april 2001 - 22:16 #1
kan du ikke prøve at forklare hvad den skal kunne - det er ikke umidelbart indlysende. Hvad bruger du Table1 til??
Avatar billede osa Nybegynder
03. april 2001 - 10:08 #2
Da det er svært at ”ramme” et bestemt coordinat på en Image, vil jeg prøve at lave
en rektangel uden om coordinatet.
x og y er musens coordinater på en Image.
A= xmin, B=xmax, C=ymin, D=ymax.
Feks. A=100, B=120, C=100, D=120, disse tal danner en rektangel 100/100  120/120 (tallene ligger I DBGrid). Når man klikker med musen indenfor en rektangel, skal DBGrid finde den række hvor tallene
passer og derefter udfører en handling.

Ole

Avatar billede nico26 Nybegynder
03. april 2001 - 13:49 #3
dvs. at i field 3-6 gemmer du coordinaterne?
og så vil du vise det der ligger i  field1, hvor X og Y ligger indenfor det rektangel coordinaterne repræsenterer?
Avatar billede osa Nybegynder
03. april 2001 - 15:23 #4
Helt rigtigt.

Ole
Avatar billede nico26 Nybegynder
03. april 2001 - 18:51 #5
Jeg løber alle records igennem, og checker om musens koordinater er indenfor rektanglet. Hvis den aktuelle record matcher stoppes løkken, og field[1] udskrives i lablen. Jeg forstår dog ikke se hvorfor du bruger DBGridets data, og ikke tager dem direkte fra tabellen? Det kunne også laves lidt fiksere, hvis du brugte en TQuery, men det er jo op til dig.

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  A, B, C, D: Integer;
  Found: Boolean;
begin
  Table1.First;
  Found := False;

  while not Table1.Eof and not Found do
  begin
    A := DBGrid1.Fields[3].AsInteger;
    B := DBGrid1.Fields[4].AsInteger;
    C := DBGrid1.Fields[5].AsInteger;
    D := DBGrid1.Fields[6].AsInteger;

    if ((X > A) and (X < B)) and ((Y > C)  and (Y < D)) then
    begin
      Label1.Caption := DBGrid1.Fields[1].AsString;
      Found := True;
    end
    else
      Table1.Next;
  end;

  if not Found then Label1.Caption := \'\';
end;
Avatar billede osa Nybegynder
03. april 2001 - 21:05 #6
Tak, det virker helt som det skal.

Ole
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