Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Startbutton aktivieren/deaktivieren (https://www.delphipraxis.net/46931-startbutton-aktivieren-deaktivieren.html)

PierreB 3. Jun 2005 07:48


Startbutton aktivieren/deaktivieren
 
Moin,

ich benutze folgenden Code aus dem Easy Helper um den Startbutton (Windows) zu deaktivieren:
Delphi-Quellcode:
procedure SetStartBtnEnabled(const AEnabled: Boolean);
begin
  EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd',nil),
                            0,
                            'Button',
                            nil),
               AEnabled);
end;
Das funktioniert auch so wie es sollte. Nur jetzt möchte ich das der Startbutton wieder aktiviert wird. Im Easy Helper steht das das erst wieder nach einem Systemneustart zurückgesetzt wird. Gibt es eine andere Möglichkeit den Startbutton wieder zu aktivieren ?

Thx

JasonDX 3. Jun 2005 08:09

Re: Startbutton aktivieren/deaktivieren
 
normalerweise sollte
Delphi-Quellcode:
SetStartBtnEnabled(true);
deinen Wünschen nachkommen :gruebel:

PierreB 3. Jun 2005 08:38

Re: Startbutton aktivieren/deaktivieren
 
Zitat:

Zitat von Chimaira
normalerweise sollte
Delphi-Quellcode:
SetStartBtnEnabled(true);
deinen Wünschen nachkommen :gruebel:

Ähm damit wird der Startbutton deaktiviert.

Und mit
Delphi-Quellcode:
SetStartBtnEnabled(false)
wird er aber nicht wieder aktiviert.

?

alcaeus 3. Jun 2005 08:50

Re: Startbutton aktivieren/deaktivieren
 
Hallo Pierre,

Das Ergebnis ist wie erwartet: SetStartBtnEnabled(True) aktiviert den Startbutton, SetStartBtnEnabled(False) deaktiviert ihn. Getestet auf WinXP SP1

Greetz
alcaeus

freak4fun 3. Jun 2005 08:56

Re: Startbutton aktivieren/deaktivieren
 
Hallo :hi:,
bei mir funktioniert es auch. (Win2000, SP4)

Aber warum sollte man den StartButton deaktivieren? :gruebel:

MfG
freak

DP-Maintenance 3. Jun 2005 09:03

DP-Maintenance
 
Dieses Thema wurde von "alcaeus" von "Sonstige Fragen zu Delphi" nach "Windows API / MS.NET Framework API" verschoben.
Ich geb dem Thema mal einen dezenten Schubs. Hat wohl mehr mit der WinAPI zu tun ;)

PierreB 3. Jun 2005 09:04

Re: Startbutton aktivieren/deaktivieren
 
Zitat:

Zitat von alcaeus
Hallo Pierre,

Das Ergebnis ist wie erwartet: SetStartBtnEnabled(True) aktiviert den Startbutton, SetStartBtnEnabled(False) deaktiviert ihn. Getestet auf WinXP SP1

Greetz
alcaeus

Ah stimmt jetzt geht es, dankeschön. :-)

Marphy 3. Jun 2005 13:23

Re: Startbutton aktivieren/deaktivieren
 
Hallo zusammen,

Zitat:

Zitat von PierreB
Delphi-Quellcode:
procedure SetStartBtnEnabled(const AEnabled: Boolean {<---} );

Doofe Frage, die auch nicht wirklich hierher passt, aber bei der gelegenheit stell ich sie trotzdem :stupid: :mrgreen:
Warum wird ein Boolean-Parameter als const übergeben?! Das macht (performance- & ressourcenmäßig) vielleicht bei Strings einen Sinn, aber doch nicht bei einem Boolean (nur 2 Byte, ein Pointer hat 4 Byte!)oder auch einem Integer (4 Byte <-> 4 Byte Pointer)... ?!

Gruß + Dank, Marco

alcaeus 3. Jun 2005 13:25

Re: Startbutton aktivieren/deaktivieren
 
Hallo Marco,

das Schluesselwort const wird verwendet, um dem Programmierer der die Routine verwendet zu zeigen, dass ganz bestimmt nichts an der Variable geaendert wird. AFAIR laesst Delphi in dem Fall keine Zuweisung an die Variable innerhalb der Funktion zu. Bei einer "normalen" Uebergabe [Foo(bar: Integer)] ist dies nicht der Fall.

Greetz
alcaeus

ste_ett 3. Jun 2005 13:39

Re: Startbutton aktivieren/deaktivieren
 
Delphi braucht dann auch keinen Speicher, um eine Kopie des übergebenen Strings bereitzustellen, da dieser nicht geändert werden kann.

Marphy 3. Jun 2005 15:20

Re: Startbutton aktivieren/deaktivieren
 
Hallo ihr beiden,

Zitat:

Zitat von alcaeus
das Schluesselwort const wird verwendet, um dem Programmierer der die Routine verwendet zu zeigen, dass ganz bestimmt nichts an der Variable geaendert wird. AFAIR laesst Delphi in dem Fall keine Zuweisung an die Variable innerhalb der Funktion zu. Bei einer "normalen" Uebergabe [Foo(bar: Integer)] ist dies nicht der Fall.

:gruebel: Ich kenne das Ganze so...
Param: Typ: Param stellt eigene Variable dar, Wert wird in diesen Param von der Übergabe kopiert, d.h. Änderungen haben keine Auswirkungen auf die ursprünglichen Übergabevariable.
var Param: Typ Param ist eigentlich ein Pointer, der auf Übergabe zeigt. Änderungen wirken sich auch auf Übergabevariable aus.
const Param: Typ Param ist eigentlich ein Pointer, der auf Übergabe zeigt. Änderungen dürfen jedoch nicht vorgenommen werden.

Wenn dem nicht so ist, klärt mich bitte auf :-D

Zitat:

Delphi braucht dann auch keinen Speicher, um eine Kopie des übergebenen Strings bereitzustellen, da dieser nicht geändert werden kann.
Sorry, aber das ist in jedem Fall Quatsch! Entweder es wir dein Pointer übergeben (der benönigt 4 Byte) oder der ganze Wert wird kopiert, in dem Falle wird SizeOf(Typ)-Speicher benötigt...

Gruß, Marco

JasonDX 3. Jun 2005 17:16

Re: Startbutton aktivieren/deaktivieren
 
Ich hab jetzt folgendes kleines testprogramm geschrieben
Delphi-Quellcode:
procedure h(a: integer);
begin
  ShowMessage(IntToStr(a));
end;

procedure a({const/var/nix}j: integer); assembler;
asm
  push eax
  call h
  pop eax
end;
folgende Aufrufe brachten die ergebnisse (bei parameter 123):
  • Header: nix
    Ergebnis: 123
  • Header: const
    Ergebnis: 123
  • Header: var
    Ergebnis: Speicheradresse

Daraus schließe (ich zumindest), dass der Const-parameter also nur dem compiler sagt, dass dieser wert nie verändert werden wird, aber im eigentlichen bei der parameterübergabe kein unterschied liegt (zwischen const und nix). bei var wird hingegen klarerweise die adresse mitgegeben.
Es kann aber auch gut sein, dass der const-parameter durch den compiler optimiert wird, dass bei Datentypen > Pointer der Zeiger darauf mitgegeben wird, nachdem der wert sowieso nicht veränder wird.

MagicAndre1981 3. Jun 2005 17:45

Re: Startbutton aktivieren/deaktivieren
 
Zitat:

Zitat von alcaeus
Hallo Pierre,
Das Ergebnis ist wie erwartet: SetStartBtnEnabled(True) aktiviert den Startbutton, SetStartBtnEnabled(False) deaktiviert ihn. Getestet auf WinXP SP1

Dem kann ich nur zustimmen. Der Code funzzt super.

@all Warum diskutiert ihr das mit dem const hier aus. Macht doch einen neuen Thread auf.
:shock: Und ein Mod macht bei dem OT auch noch mit :shock:

Marphy 3. Jun 2005 18:44

Re: Startbutton aktivieren/deaktivieren
 
Hallo,
danke für deine Antowort, Mike!

Zitat:

Zitat von Chimaira
Es kann aber auch gut sein, dass der const-parameter durch den compiler optimiert wird, dass bei Datentypen > Pointer der Zeiger darauf mitgegeben wird, nachdem der wert sowieso nicht veränder wird.

Übergebe doch mal einen String! Bei mir wird nur bei var ein Pointer übergeben, sonst nicht... Also wäre meine Frage an sich geklärt. Danke!
Ach ja: gibt's dann eigentlic auch sowas wie ein varconst? :stupid:

@André:
Sorry, schon gut! :zwinker: Aber deswegen einen eigenen Thread aufmachen... Wär auch doof. :-D

Gruß, Marco

alcaeus 3. Jun 2005 18:46

Re: Startbutton aktivieren/deaktivieren
 
Zitat:

Zitat von Marphy
Ach ja: gibt's dann eigentlic auch sowas wie ein varconst? :stupid:
[...]
Aber deswegen einen eigenen Thread aufmachen... Wär auch doof. :-D

Bitte mach das doch. Der Thread ist jetzt schon OT genug, wir muessen es nicht noch weiter treiben.

Greetz
alcaeus

Zacherl 3. Jun 2005 18:47

Re: Startbutton aktivieren/deaktivieren
 
Um auch noch meinen Senf dazuzugeben: :-D

Das Deaktivieren des Startbuttons verhindert keinesfalls das öffnen des Startmenüs z.b. mit der Windows Taste, wenn es das ist, was du bezwecken willst.

Florian

PierreB 4. Jun 2005 09:23

Re: Startbutton aktivieren/deaktivieren
 
Zitat:

Zitat von Florian Bernd
Um auch noch meinen Senf dazuzugeben: :-D

Das Deaktivieren des Startbuttons verhindert keinesfalls das öffnen des Startmenüs z.b. mit der Windows Taste, wenn es das ist, was du bezwecken willst.

Florian

Hallo,

ja danke, hagtte ich auch schon rausgefunden. Ich hab die Taskleiste dann jetzt einfach ausgeblendet, und wenn ein User doch noch ins Startmenü will kann er immernoch nen Shortcut drücken.

Vielen Dank für eure Antworten :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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