Avatar billede tuctoh Nybegynder
01. januar 2004 - 16:08 Der er 15 kommentarer og
2 løsninger

Onclick på usynlig-ting?

Hvordan laver jeg et "onclick" event på et sted på skærmen, hvor der ikke er synlige objekter?
Jeg har nogle images som bliver lavet "On the fly", og en funktion skal kaldes når man trykker på disse. Til det formål vil jeg tro at en usynlig knap ville kunne bruges - men en knap med visible sat til false kan man ikke klikke på!?

Hvordan løser jeg så det? Jeg har delphi 4.
Avatar billede thesurfer Nybegynder
01. januar 2004 - 16:12 #1
Du ligger et image komponent på stedet, men vælger ikke at loade et billede.
Du kan så klikke på komponenten.
Avatar billede thesurfer Nybegynder
01. januar 2004 - 16:15 #2
Bare fordi man ikke kan se det, betyder det ikke at det ikke er der :)
Avatar billede tuctoh Nybegynder
01. januar 2004 - 16:21 #3
ok, det virker som sådan fint nok... på nær at de andre billeder lægger sig OVEN PÅ, så klikker ikke opfanges.
Hvordan kan det klares?
Avatar billede leifj Nybegynder
01. januar 2004 - 16:22 #4
Du kan også ændre skifte billedet til at være ensfarvet og derefter sætte denne farve til transparent.
Avatar billede thesurfer Nybegynder
01. januar 2004 - 16:26 #5
Så skal du have fat i noget z-index eller hvad det nu hedder i Delphi..
Avatar billede leifj Nybegynder
01. januar 2004 - 16:26 #6
Du skal blot sætte

billeder[i].transparent:=true;
Avatar billede tuctoh Nybegynder
01. januar 2004 - 16:29 #7
mmm nej, transparent gør dem ikke "gennemklikkelige", kun gennemsigtige; man kan se igennem det hvide på billedet, men den fanger ikkke hvad man klikker på.
Avatar billede leifj Nybegynder
01. januar 2004 - 16:31 #8
Du skal ikke lægge noget nyt billede over det gamle, men blot ændre dit nuværende billede til transparent, så virker det.
Avatar billede leifj Nybegynder
01. januar 2004 - 16:32 #9
og så skal du naturligvis sætte en onclick event på dit billede
Avatar billede tuctoh Nybegynder
01. januar 2004 - 16:34 #10
fra deres help:
"Specifies whether the background of the image obscures objects below the image object.

property Transparent: Boolean;

Description

Set Transparent to True to allow objects behind the TImage object to show through the background of the bitmap.  Set Transparent to False to make the background of the bitmap opaque. Setting Transparent sets the Transparent property of the Picture."


transparent på et billede gør den gennesigtig, men ikke at man kan klikke igennem den :s

Jeg har som sagt lagt et usynligt billede der hvor de dynamiske billeder kommer... de usynlige billeder er bare desværre neders så de ikke opfanger at man trykker der.
Avatar billede leifj Nybegynder
01. januar 2004 - 16:40 #11
Kan du ikke blot lave en onclick event på dine synlige billeder ?
Avatar billede tuctoh Nybegynder
01. januar 2004 - 16:42 #12
de synlige billeder er dem som oprettes vha. imagelist'en... jeg ved ikke om det er muligt at lave en onclick event på dem - hvordan det skal gøres ved jeg ikke.
Har kun fundet frem til at lave events i design-mode.
Avatar billede leifj Nybegynder
01. januar 2004 - 16:44 #13
Kan du ikke bruge noget fra dette:

procedure TForm1.FormShow(Sender: TObject);
var i : integer;
begin
    //initialiser billeder
    for i:=0 to 7 do
    begin
    billeder[i]:=Timage.Create(Self);
    billedliste.GetBitmap(0,billeder[i].picture.bitmap);
    billeder[i].Parent:=Self;
    billeder[i].Visible := True;
    billeder[i].Left := i*50;
    billeder[i].top := 200;
    billeder[i].Transparent:=true;
    billeder[i].OnClick:=TestClick;
    end;
end;


procedure TForm1.TestClick(Sender: TObject);
begin
//
end;
Avatar billede hrc Mester
01. januar 2004 - 16:45 #14
Hvis området du vil klikke på ligger hen over eks. et TListBox, så kan du gøre følgende (men kun indenfor denne):

procedure TForm1.ListBox2MouseDown(Sender: TObject; Button: TMouseButton;
                                  Shift: TShiftState; X, Y: Integer);
begin
  if (X >= 16) and (X <= 64) and
    (Y >= 16) and (Y <= 64) then
    MessageDlg('Hvasååå!', mtInformation, [mbOK], 0);
end;

Det lyder dog stadig som noget skod-GUI du har gang i.
Avatar billede tuctoh Nybegynder
01. januar 2004 - 16:49 #15
lei, lol, hvorfor er det altid så nemt??
Jo, det kunne man... og det virker.

Hvis man kunne
billeder[i].OnClick:=switch(i);
ville det være lidt smartere, men det ser ud til at den ikke går med til at tage parametre.

hrc, jeg er noob til delphi... kender ikke dets muligheder og begrænsninger. Så det bliver måske ikke den mest optimale kode, men det skal nok komme hen ad vejen
Avatar billede leifj Nybegynder
01. januar 2004 - 17:13 #16
Hvis du vil have forskellige events for de forskellige billeder kan du måske styre det således:

Case i of
  0: billeder[i].OnClick:=TestClick0;
  1: billeder[i].OnClick:=TestClick1;
  osv., osv.
end;
Avatar billede tuctoh Nybegynder
01. januar 2004 - 17:32 #17
ja, valgte jeg også at gøre til sidst... er ikke optimalt (det andet ville fylde mindre) men det virker da perfekt.

tak for hjælpen!
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