Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Klick auf Button mit enabled=false (https://www.delphipraxis.net/151768-klick-auf-button-mit-enabled%3Dfalse.html)

eike42 1. Jun 2010 07:05


Klick auf Button mit enabled=false
 
Moin moin,

ich habe ein eigentlich ziemlich einfaches Problem, habe aber noch keine Lösung gefunden.

Problem: Ich möchte ein Control (in meinem Fall ein TAdvToolbarButton aus TMS, ist aber egal) "ausgrauen", aber trotzdem das Mouse-Event abfangen. Ja, ist nicht meine Idee, es soll halt so.

Allerdings sind alle Mouse-Events deaktiviert, solange ich enabled auf true habe.

Mein Workaround wäre, das Aussehen des Buttons so zu verändern, dass er "disabled" aussieht, aber es nicht ist.

Gibt es noch eine andere Möglichkeit, von der ich nichts weiss? Kann man einem Control sagen, dass es im "disabled"-Zustand noch auf Events reagieren soll?

Vielen Dank für eure Hilfe!
Eike

mkinzler 1. Jun 2010 07:07

Re: Klick auf Button mit enabled=false
 
Wenn ein Control deaktivuiert ist, ist es nunmal nicht mehr bedienbar. das ist der Sinn des Deaktivieren.

Uwe Raabe 1. Jun 2010 07:23

Re: Klick auf Button mit enabled=false
 
Zitat:

Zitat von mkinzler
Wenn ein Control deaktivuiert ist, ist es nunmal nicht mehr bedienbar. das ist der Sinn des Deaktivieren.

Exakt!

Um es deutlich zu machen, hier ein Auszug aus der Windows-API-Dokumentation:

Zitat:

EnableWindow Function
Enables or disables mouse and keyboard input to the specified window or control. When input is disabled, the window does not receive input such as mouse clicks and key presses. When input is enabled, the window receives all input.

himitsu 1. Jun 2010 07:25

Re: Klick auf Button mit enabled=false
 
Es gibt zwar zwei halbwegs einfache Möglichkeiten, um hier an die Mouse-Events zu gelangen,

aber erstmal 'ne Frage:


wozu möchtest/mußt du diese denn nutzen?
Eventuell gibt es für dein Vorhaben ja einen "besseren" Weg.

eike42 1. Jun 2010 13:42

Re: Klick auf Button mit enabled=false
 
Ein Toolbar-Button soll, wenn keine Lizenz für das Addon vorhanden ist, disabled sein, damit ein normaler User sieht, dass man da nicht klicken kann. Allerdings soll trotzdem, wenn ein User trotzdem draufklickt, eine Meldung angezeigt werden ("Extra-Lizenz benötigt, bitte kaufen, blabla").

Ich werde dann wohl das Image vom Button durch das disabled-image ersetzen, die Schriftfarbe auf "grau" setzen und die Events drauflassen. Da es in der Toolbar ist, geht sowas wie transparentes Control drüberlegen oder so natürlich auch nicht... :(

himitsu 1. Jun 2010 13:52

Re: Klick auf Button mit enabled=false
 
Zitat:

Zitat von eike42
Da es in der Toolbar ist, geht sowas wie transparentes Control drüberlegen oder so natürlich auch nicht... :(

TPaintBox hätte sich gut gemacht, aber bei dem Ort des Buttons isses wirklich blöd.

OnMouseClick des übergeordneten Controls und prüfen ob auf den Button geklickt wurde

Delphi-Quellcode:
procedure TForm1.ToolBar1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if PtInRect(Button1.BoundsRect, Point(X, Y))
      and not Button1.Enabled then
    ShowMessage('nee, is nich');
end;
@Mithrandir: wie kommst du nur darauf? :roll:

Mithrandir 1. Jun 2010 13:52

Re: Klick auf Button mit enabled=false
 
So einen Schwachsinn kann sich doch nur eine Marketingabteilung ausgedacht haben. :wall:

mkinzler 1. Jun 2010 13:54

Re: Klick auf Button mit enabled=false
 
Ich finde es schon interessant, wie jeder über fehlende UI-Standards bei Windows (im Vergleich zu MacOS) redet aber trotzdem werden (die wenigen Standards) missachtet. Ein deaktivierter Button sollte imho nicht bedienbar sein.

H4ndy 1. Jun 2010 14:17

Re: Klick auf Button mit enabled=false
 
Zitat:

Zitat von mkinzler
Ich finde es schon interessant, wie jeder über fehlende UI-Standards bei Windows (im Vergleich zu MacOS) redet aber trotzdem werden (die wenigen Standards) missachtet.

Also die "Windows User Experience Guidelines" sind mehrere hundert Seiten und beschreiben alles ziemlich gut.
Ich glaub nur eher, dass da noch nie jemand weiter reingeschaut hat. http://msdn.microsoft.com/en-us/library/aa511258.aspx
(merk ich vorallem, wenn ich Crossplatform-Programm wie InkScape nutze und da immer die "Schliessen, Speichern, Abbrechen"-Knoepfe verdreht sind.)

mkinzler 1. Jun 2010 14:18

Re: Klick auf Button mit enabled=false
 
Diese kamen aber erst mit Vista

Neutral General 1. Jun 2010 14:37

Re: Klick auf Button mit enabled=false
 
Ach ums mal grad nebenbei zu erwähnen: Es ist ein leichtes deaktivierte Buttons ferngesteuert wieder zu aktivieren. Also ein Schutz ist das nicht!

mkinzler 1. Jun 2010 14:40

Re: Klick auf Button mit enabled=false
 
Um das geht es doch nicht, der Button soll ja trotz Deaktivierung bedienbar sein

Neutral General 1. Jun 2010 14:58

Re: Klick auf Button mit enabled=false
 
Ja ich rede davon, dass folgendes NICHT sicher ist:

Delphi-Quellcode:
if Button.Enabled then
  Programmfunktion
else
  ShowMessage('Bitte kaufen!');

eike42 2. Jun 2010 06:35

Re: Klick auf Button mit enabled=false
 
Hi, erstmal danke für die Hilfe. Ich werde es mal mit dem übergeordneten Control probieren.

Zitat:

Zitat von mkinzler
Ich finde es schon interessant, wie jeder über fehlende UI-Standards bei Windows (im Vergleich zu MacOS) redet aber trotzdem werden (die wenigen Standards) missachtet. Ein deaktivierter Button sollte imho nicht bedienbar sein.

Ja und nein. Ich will ja nicht die User animieren, hier zu klicken, ganz im Gegenteil. Aber es wird halt genug User geben die den neuen Button sehen, zu sabbern anfangen und draufklicken. Und dann sollen sie halt die Info bekommen, wie sie die Funktionalität bestellen können. Klar wird das im Handbuch, im monatlichen Newsletter und auf der Homepage stehen, aber wer mit Usern zu tun hat weiss, dass die meisten das eh nicht lesen.

@H4ndy: Danke für den Link zum Windows User Experience Guidelines, da werde ich auf jeden Fall mal reinschauen.

@Neutral General: Danke für den Hinweis, natürlich wird hier auch nochmal die Lizenz abgefragt.

Zu dem Thema kann ich nur nochmal auf den Link hier zum Thema Crackerschutz verweisen.

Danke und viele Grüße
Eike

LordPsychoter 2. Jun 2010 07:38

Re: Klick auf Button mit enabled=false
 
Zur Not vergleichst du halt die stelle an der in der Form geklickt wurde mit der Stellle wo du den Button plaziert hast.

Sollte es sich in dem bereich befinden wollte er wohl draufklicken ;)

Gruß
Andreas

knochen 2. Jun 2010 07:52

Re: Klick auf Button mit enabled=false
 
1. Der Wunsch der Marketingabteilung, neue Begehrlichkeiten zu wecken, ist absolut legitim und sichert zudem den Job des Programmierers.

2. Die User von heute sind meist so routiniert im Umgang mit Windows, dass sie wissen, dass beim Klick auf einen disabelten Button nichts passiert.

3. Lösung: den Button enabled lassen und in Abhängigkeit von der Lizenz die Funktionalität oder die Kaufanimation aufrufen.

himitsu 2. Jun 2010 08:05

Re: Klick auf Button mit enabled=false
 
Zitat:

Zitat von LordPsychoter
Zur Not vergleichst du halt die stelle an der in der Form geklickt wurde mit der Stellle wo du den Button plaziert hast.

Sollte es sich in dem bereich befinden wollte er wohl draufklicken ;)

siehe Beitrag #6

Zitat:

Danke für den Hinweis, natürlich wird hier auch nochmal die Lizenz abgefragt.
Eigentlich wollte er darauf hinweisen, daß solcher Code garnicht in der EXE enthalten sein sollte.
(klar isses blöd, wenn man beim Kauf der Lizenz dann upgraden muß, aber was nicht drin ist, daß kann auch nicht gecrackt werden)

Delphi-Quellcode:
// aus
if istLizenzVorhanden then

// wird nur durch Änderung eines einzigen Bytes schnell mal
if not istLizenzVorhanden then

// aber sowas steht ja auch nochmal in den Anti Cracking FAQ


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

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