Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Panel mit nicht sichtbarem Klickbereich (https://www.delphipraxis.net/214907-panel-mit-nicht-sichtbarem-klickbereich.html)

harfes 3. Apr 2024 09:59

Panel mit nicht sichtbarem Klickbereich
 
Ich möchte gerne auf einem Panel einen definierten Bereich haben (Rechteck oder Viereck, nix kompliziertes), in dem durch einen Mausklick darauf z.B. ein bis dahin versteckter Button an anderer Stelle des Panels sichtbar wird. D.h. nur wer weiss, wo er hinklicken muss, kommt auch an den ansonsten nicht sichtbaren Button. Ich bräuchte mal eine Idee, wie ich das realisieren könnte - wahrscheinlich sehe ich mal wieder den Wald vor lauter Bäumen nicht, aber so ist es halt gerade...

Hartmut

jaenicke 3. Apr 2024 10:05

AW: Panel mit nicht sichtbarem Klickbereich
 
Im OnMouseDown bekommst du die Klickkoordinaten und kannst mit PtInRect prüfen, ob sich diese im gewünschten Rechteck befinden.

Ich würde so etwas aber z.B. mit dem Drücken der Strg-Taste kombinieren, damit es niemand zufällig trifft.

Papaschlumpf73 3. Apr 2024 10:06

AW: Panel mit nicht sichtbarem Klickbereich
 
Noch ein bisschen einfacher (aber auch amateurhafter :-)) geht es auch, wenn du ein weiteres Panel2 in das bestehende Panel1 legst. Setzte die Eigenschaften borderstyle usw. von Panel2 so, dass man es nicht mehr sehen kann. Visisble und Enabled müssen aber auf true stehen bleiben. Dann machst du das OnClick-Ereignis für das nun nicht mehr erkennbare Panel2 und sagst dann: Button1.Visible:=true

himitsu 3. Apr 2024 10:10

AW: Panel mit nicht sichtbarem Klickbereich
 
Irgendwo hinklicken und so tun, als wäre da ein Button,
oder irgendwo hinklicken und ein Button wird sichtbar, welcher sich danach anklicken lässt?

Delphi-Quellcode:
// das Erste (wurde in Bereich geklickt)
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Rect(8, 8, 50, 50).Contains(Point(X, Y)) then
    machwas;
end;

// oder das Zweite (wurde da hingecklickt, wo der Knopf mit Visible=False wäre)
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button1.BoundsRect.Contains(Point(X, Y)) then
    Button1.Visible := True;
end;

[edit]
Ja, oder eben mit der Funktion Delphi-Referenz durchsuchenPtInRect, anstatt dem Record-Helper,
oder selbstgemacht
Delphi-Quellcode:
if (X > 8) and (X < 50) and (Y > 8) and (Y < 50) then
.

Uwe Raabe 3. Apr 2024 10:14

AW: Panel mit nicht sichtbarem Klickbereich
 
Geht auch ohne viel Aufwand in dem man ein TImage entsprechend platziert und auf dessen OnClick reagiert.

harfes 3. Apr 2024 10:15

AW: Panel mit nicht sichtbarem Klickbereich
 
@Jaenike: Gute Idee mit der Strg-Kombi - danke!
@Papaschlumpf73: Ebenfalls gut! Mir ist schon klar, dass das ein wenig primmi ist, aber bevor ich eine ganze Nutzerverwaltung mit Rechten für ein so kleines Programm hochziehe, war das eine (zugegeben seeeehr einfache) Idee eines Schutzes.
@himitsu: das entspricht wohl dem Vorschlag von Jaenike - aber ja, genausoetwas war angedacht...danke für den Quelltext...da kann ich noch schneller testen:lol:
@Uwe Rabbe: Auch gut!


Danke euch für die Ideen - ich werde mal testen!

Hartmut

himitsu 3. Apr 2024 10:30

AW: Panel mit nicht sichtbarem Klickbereich
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1535251)
Geht auch ohne viel Aufwand in dem man ein TImage entsprechend platziert und auf dessen OnClick reagiert.

Oder ein kleines TPanel (BevelOuter=bvNone), TPaintBox, TShape (Brush.Style=bsClear und Pen.Style=psClear) oder oder oder

Image und PaintBox haben den Vorteil, dass man sie im Designer sieht. Oder die Anderen erst zur Laufzeit im Constructor bzw. OnCreate unsichtbar machen.
Wobei PaintBox von den Beiden das Ressourcenschonenstere ist, da eh kein Bild gemalt werden wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz