Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Komponente geht nicht (https://www.delphipraxis.net/82803-komponente-geht-nicht.html)

I.A. 19. Dez 2006 18:11


Komponente geht nicht
 
Hallo, das ist meine erste Komponente, eine shutdown Komponente bloss lässt sie sich nicht Compilieren.
Wenn ihr mal den Quelltext durchlesen und mir sagen könnten was ich falsch gemacht habe wäre das hilfreich.


Delphi-Quellcode:
unit shutdown;

interface

uses
  SysUtils, Classes;

type
  Tshutdown = class(TComponent)
  private
    { Private-Deklarationen }
    out: Boolean;
    down: Boolean;
    re: Boolean;
    remote: Boolean;
    kill: Boolean;
    ip: Integer;

  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    function shutdown: Boolean;
    function logout: Boolean;
    function restart: Boolean;
    function remote_shutdown: Boolean;
    function killtask : Boolean;

  published
    { Published-Deklarationen }
    property shutdown_ : Boolean Read down write down;
    property restart_ : Boolean Read re write re;
    property logout_ : Boolean Read out write out;
    property remote_shutdown_ : Boolean Read remote write remote;
    property remote_shutdown_ip : Integer Read IP write IP;
    property killtask_ : Boolean Read kill write kill;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [Tshutdown]);
end;

function Tshutdown.shutdown:Boolean;
begin
  if shutdown_= true then
  begin
  ('cmd "shutdown -s -t 00"');
  end
  else
  shutdown_ := false;
end;

function Tshutdown.logout:Boolean;
begin
  if logout_= true then
  begin
  ('cmd "shutdown -l"');
  end
  else
  logout_ := false;
end;

function Tshutdown.restart:Boolean;
begin
  if restart_= true then
  begin
  ('cmd "shutdown -r"');
  end
  else
  restart_ := false;
end;

function Tshutdown.remote_shutdown:Boolean;
begin
  if remote_shutdown_= true then
  begin
  ('cmd "shutdown -m \\(+remote_shutdown_ip) -s"');
  end
  else
  remote_shutdown_ := false;
end;

function Tshutdown.killtask:Boolean;
begin
  if killtask_= true then
  begin
  ('cmd "shutdown -f"');
  end
  else
  killtask_ := false;

end;

end.

Neutral General 19. Dez 2006 18:13

Re: Komponente geht nicht
 
Delphi-Quellcode:
('cmd "shutdown -f"');
Mal ne dumme Frage: Was soll das werden wenns fertig ist? :shock:

EDIT: Würde mir mal Shellexecute (Uses: shellapi) anschauen...

I.A. 19. Dez 2006 18:18

Re: Komponente geht nicht
 
Ja, ich habe schonmal davon gehört von dem shellexecute teil, aber ich hab des net geblickt.
Des shutdown -f bricht alle Anwendungen ohne Warnung ab.

mkinzler 19. Dez 2006 18:27

Re: Komponente geht nicht
 
Zitat:

Ja, ich habe schonmal davon gehört von dem shellexecute teil, aber ich hab des net geblickt.
Du willst andere Rechner Herunterfahren, weißt aber nicht wie man die OH benutzt?

I.A. 19. Dez 2006 18:35

Re: Komponente geht nicht
 
Ja, das lässt sich ja noch ändern meine Frage war eigentlich warum die Komponente nicht funktioniert.

mkinzler 19. Dez 2006 18:37

Re: Komponente geht nicht
 
Ich nehme mal an, daß sie sich so nicht kompilieren läßt.

I.A. 19. Dez 2006 18:44

Re: Komponente geht nicht
 
Genau !!!

Zitat:

Hallo, das ist meine erste Komponente, eine shutdown Komponente bloss lässt sie sich nicht Compilieren. Wenn ihr mal den Quelltext durchlesen und mir sagen könnten was ich falsch gemacht habe wäre das hilfreich.

Ne jetzt mal im ernst warum nicht ?? :gruebel:
Ich bin da voller Anfänger, wie gesagt meine erste Komponente und Delphi Anfänger bin ich auch noch.

Muetze1 19. Dez 2006 18:48

Re: Komponente geht nicht
 
Zitat:

Zitat von I.A.
Ne jetzt mal im ernst warum nicht ?? :gruebel:

Zitat:

Zitat von Neutral General
Delphi-Quellcode:
('cmd "shutdown -f"');
Mal ne dumme Frage: Was soll das werden wenns fertig ist? :shock:

EDIT: Würde mir mal Shellexecute (Uses: shellapi) anschauen...

Das wurde nicht umsonst gefragt! Das ist keine Anweisung und keine Aktion - daher die Frage: Was soll das werden?

mkinzler 19. Dez 2006 18:48

Re: Komponente geht nicht
 
Wurde doch schon gesagt:
Zitat:

Delphi-Quellcode:
('cmd "shutdown -f"');

usw. geht nicht.Du mußt Shellexecue nehmen.

I.A. 19. Dez 2006 18:54

Re: Komponente geht nicht
 
1.
Kann mal eine ein Beispiel machen ? nur von z.B.
Delphi-Quellcode:
('cmd "shutdown -f"');
2.
Sonst würde alles gehen ???

inherited 19. Dez 2006 18:57

Re: Komponente geht nicht
 
Fast.Wenn du mir noch sagst was hierbei rauskommen soll
Delphi-Quellcode:
('cmd "shutdown -m \\(+remote_shutdown_ip) -s"');

mkinzler 19. Dez 2006 18:58

Re: Komponente geht nicht
 
Z.B.
Delphi-Quellcode:
ShellExecute(Application.Handle, 'open', 'cmd', 'shutdown -f', nil, SW_SHOWNORMAL);

I.A. 20. Dez 2006 12:47

Re: Komponente geht nicht
 
Danke für das Beispiel aber was bedeutet
Delphi-Quellcode:
nil
und wozu das SW_SHOWNORMAL. (Der andere Code heisst ja das es cmd öffnen soll und den Befehl xxxx ausführen soll oder ?)



@inherited:
Also das wiess ich nicht so genau, ich dachte helt mal das man die IP adresse in die Variable remote_shutdown_ip eingibt und dann den Rechner mit der IP die Eingegeben wurde herunterfährt.

mkinzler 20. Dez 2006 13:02

Re: Komponente geht nicht
 
Die Parameterund ihre Bedeutung werden in der OH beschrieben

I.A. 20. Dez 2006 14:15

Re: Komponente geht nicht
 
Was ist die OH, oder wie kommt man da hin ???



Das Application.Handle und das SW_Shownormal geht nicht, beides rot Unterstrichen.

Muetze1 20. Dez 2006 14:17

Re: Komponente geht nicht
 
Application ist in Forms deklariert, also die mal einbinden in der Uses Liste.
SW_SHOWNORMAL sollte in der Windows deklariert sein, also auch diese mal einbinden...

/EDIT: Beides würdest du über die Hilfe herausfinden!

I.A. 20. Dez 2006 14:21

Re: Komponente geht nicht
 
Ja, aber wie kommt man zur Hilfe ??

mkinzler 20. Dez 2006 14:27

Re: Komponente geht nicht
 
Wie in den meißten Windows-Programmen:
Markiere die Funktion (ShellExecute) und drücke F1!

I.A. 20. Dez 2006 14:33

Re: Komponente geht nicht
 
Ok Dank dir :hi:

I.A. 20. Dez 2006 15:17

Re: Komponente geht nicht
 
Ja, also meine Komponente hab ich jetzt installiert, den Bibliothekspfad auch Hinzugefügt und die Komponente auf meiner Form, jetzt kann ich die Eigenschaften aber nicht ändern, am Anfang habe ich shutdown und so auf false, jetzt will ich die eigenschaft auf true setzen, aber es geht nicht.

Ich mach das so:
Delphi-Quellcode:
Nach eine Mausklick auf ein Button;
begin
shutdown1.shutdown := true;
end;
Aber ohne erfolg, das zweite shutdown ist rot Unterstrichen. :gruebel:

mkinzler 20. Dez 2006 15:38

Re: Komponente geht nicht
 
Die Property heißt auch shutdown_

I.A. 20. Dez 2006 15:39

Re: Komponente geht nicht
 
Sie ist aber trotzdem unterstrichen.



\\Edit
Delphi-Quellcode:
unit shutdown;

interface

uses
  SysUtils, Classes, shellapi, Forms, Windows;

type
  Tshutdown = class(TComponent)
  private
    { Private-Deklarationen }
    out: Boolean;
    down: Boolean;
    re: Boolean;
    kill: Boolean;


  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    function shutdown: Boolean;
    function logout: Boolean;
    function restart: Boolean;
    function killtask : Boolean;

  published
    { Published-Deklarationen }
    property shutdown_ : Boolean Read down write down;
    property restart_ : Boolean Read re write re;
    property logout_ : Boolean Read out write out;
    property killtask_ : Boolean Read kill write kill;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [Tshutdown]);
end;

function Tshutdown.shutdown:Boolean;
begin
  if shutdown_= true then
  begin
  ShellExecute(Application.Handle, 'open', 'cmd', 'shutdown -s', nil, SW_Shownormal);
  end
  else
  shutdown_ := false;
end;

function Tshutdown.logout:Boolean;
begin
  if logout_= true then
  begin
  ShellExecute(Application.Handle, 'open', 'cmd', 'shutdown -l', nil, SW_Shownormal);
  end
  else
  logout_ := false;
end;

function Tshutdown.restart:Boolean;
begin
  if restart_= true then
  begin
  ShellExecute(Application.Handle, 'open', 'cmd', 'shutdown -r', nil, SW_Shownormal);
  end
  else
  restart_ := false;
end;


function Tshutdown.killtask:Boolean;
begin
  if killtask_= true then
  begin
  ShellExecute(Application.Handle, 'open', 'cmd', 'shutdown -f', nil, SW_Shownormal);
  end
  else
  killtask_ := false;

end;

end.
[edit=MrSpock]Delphi-Code tags eingefügt. Mfg, MrSpock[/edit]

mkinzler 20. Dez 2006 15:43

Re: Komponente geht nicht
 
Zeig mal den Code der Unit, bzw hänge diese an deinen Beitrag

Neutral General 20. Dez 2006 15:53

Re: Komponente geht nicht
 
Shutdown is auch ne Funktion... dh du rufst einfach nur

Delphi-Quellcode:
DeineKlasse.Shutdown_;
auf und dann wird das ausgeführt.. du kannst funktionen nix zuweisen ;)

Gruß
Neutral General

hoika 20. Dez 2006 16:06

Re: Komponente geht nicht
 
OH = Online Hilfe

F1


Heiko

I.A. 22. Dez 2006 10:48

Re: Komponente geht nicht
 
Ich will aber haben das ich dem Befehl z.B. "shutdown" den Wert true oder false zuweisen kann.

hoika 28. Dez 2006 08:16

Re: Komponente geht nicht
 
Hallo #,

du kannst nur properties Werte zuweisen.

ausserdem solltest du dich an die Delphi-Konventionen halten.

Delphi-Quellcode:
procedure SetShutDown(theValue: Boolean);
begin
  if theValue then
  begin
    DoInternalShutDown; // DoInternalShutDown enthält den shutdown code
  end;
end;

property ShutDown: Boolean
  write SetShutDown; // read ist sinnlos
Heiko

I.A. 1. Jan 2007 19:10

Re: Komponente geht nicht
 
Danke dir Vielmals


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