AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"
Thema durchsuchen
Ansicht
Themen-Optionen

Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

Ein Thema von Gloegg_FHBI · begonnen am 2. Jun 2014 · letzter Beitrag vom 4. Jun 2014
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Gloegg_FHBI
Gloegg_FHBI

Registriert seit: 28. Nov 2006
Ort: Neuss
46 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 09:39
Delphi-Version: 7
Hallo DPler,

Ich habe folgende Klasse geschrieben:
Delphi-Quellcode:
type
  IWaitCursor = interface
  end;

  TWaitCursor = class (TInterfacedObject, IWaitCursor)
  private
    fCursor : TCursor;
  public
    constructor Create;
    destructor Destroy; override;
  end;

implementation

constructor TWaitCursor.Create;
begin
  inherited;
  fCursor := Screen.Cursor;
  Screen.Cursor := crHourGlass;
  MainFrom.TrafficLight := tlRed;
end;

destructor TWaitCursor.Destroy;
begin
  Screen.Cursor := fCursor;
  MainFrom.TrafficLight := tlGreen;
  inherited;
end;
Diese Klasse benutze ich um in länger dauernden Prozeduren den Wartecursor anzuzeigen und automatisch den richtigen Cursor wiederherzustellen, nachdem die Prozedur beendet ist.

Nun bekomme ich aber für jede Verwendung einen Hinweis vom Compiler, dass die variable nicht genutzt wird. Kann man das irgendwie für diese Fälle ausschalten?

Delphi-Quellcode:
procedure TMainForm.MyMethod;
var
  cur : IWaitCursor;
begin
  cur := TWaitCursor.Create; // Auf 'cur' zugewiesener Wert wird niemals benutzt
  sleep(1000);
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 09:42
In diesem Fall könnte man ausnahmsweise with verwenden:
Delphi-Quellcode:
with TWaitCursor.Create do
  sleep(1000);
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 09:52
In diesem Fall könnte man ausnahmsweise with verwenden:
Delphi-Quellcode:
with TWaitCursor.Create do
  sleep(1000);
Muss er ja nicht einmal.

Delphi-Quellcode:
procedure TMainForm.MyMethod;
begin
  TWaitCursor.Create;
  sleep(1000);
end;
Geht auch und produziert keine Warnung. Warum eine Variable anlegen wenn man sie eh nicht verwendet?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 09:54
In diesem Fall könnte man ausnahmsweise with verwenden:
Delphi-Quellcode:
with TWaitCursor.Create do
  sleep(1000);
Das gibt ein Speicherleck

In diesem Fall könnte man ausnahmsweise with verwenden:
Delphi-Quellcode:
with TWaitCursor.Create do
  sleep(1000);
Muss er ja nicht einmal.

Delphi-Quellcode:
procedure TMainForm.MyMethod;
begin
  TWaitCursor.Create;
  sleep(1000);
end;
Geht auch und produziert keine Warnung. Warum eine Variable anlegen wenn man sie eh nicht verwendet?
Aber ebenfalls ein Speicherleck
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 2. Jun 2014 um 09:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 09:59
Stimmt. Dann halt mit Variable und try-finally
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 10:00
Erweitere die Klasse um eine class function Construct : IWaitCursor;
Delphi-Quellcode:
type
  IWaitCursor = interface
  end;

  TWaitCursor = class (TInterfacedObject, IWaitCursor)
  private
    fCursor : TCursor;
  public
    constructor Create;
    destructor Destroy; override;

    class function Construct : IWaitCursor;
  end;

implementation

class function TWaitCursor.Construct : IWaitCursor;
begin
  Result := TWaitCursor.Create;
end;

constructor TWaitCursor.Create;
begin
  inherited;
  fCursor := Screen.Cursor;
  Screen.Cursor := crHourGlass;
  MainFrom.TrafficLight := tlRed;
end;

destructor TWaitCursor.Destroy;
begin
  Screen.Cursor := fCursor;
  MainFrom.TrafficLight := tlGreen;
  inherited;
end;
dann kann das ohne Speicherleck und Warnung so benutzt werden
Delphi-Quellcode:
procedure Foo;
begin
  TWaitCursor.Construct;
  Sleep( 1000 );
end;
Stimmt. Dann halt mit Variable und try-finally
Wieso?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 10:05
Nebenbei bemerkt, ist diese direkte Referenzierung MainFrom.TrafficLight := tlRed; natürlich sehr suboptimal. Damit hast du der Klasse eine sehr starke Abhängigkeit gegeben, die man eigentlich vermeiden soll (eigentlich muss).

Das solltest du anders lösen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 10:40
Hier eine Variante ohne diese Abhängigkeiten und Überflüssiges (z.B. IWaitCursor ) und vor allem auch kaskadierbar
Delphi-Quellcode:
unit WaitCursor;

interface

uses
  System.SysUtils,
  Vcl.Forms,
  Vcl.Controls;

type
  TWaitCursor = class( TInterfacedObject )
  private
    class var [weak] _Instance : TWaitCursor;
    class var _OnShow : TProc;
    class var _OnHide : TProc;
  private
    FCursor : TCursor;
  protected
    constructor Create;
  public
    destructor Destroy; override;

    class function Show : IInterface;
    class property OnShow : TProc read _OnShow write _OnShow;
    class property OnHide : TProc read _OnHide write _OnHide;
  end;

implementation

{ TWaitCursor }

constructor TWaitCursor.Create;
begin
  inherited;
  FCursor := Screen.Cursor;
  Screen.Cursor := crHourGlass;
  if Assigned( _OnShow )
  then
    _OnShow( );
end;

destructor TWaitCursor.Destroy;
begin
  _Instance := nil;
  Screen.Cursor := FCursor;
  if Assigned( _OnHide )
  then
    _OnHide( );
  inherited;
end;

class function TWaitCursor.Show : IInterface;
begin
  if not Assigned( _Instance )
  then
    _Instance := TWaitCursor.Create;
  Result := _Instance;
end;

end.
Beispiel
Delphi-Quellcode:
procedure Foo;
begin
  TWaitCursor.Show;
  Sleep( 1000 );
end;

procedure Bar;
begin
  TWaitCursor.Show;
  Foo;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 2. Jun 2014 um 10:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#9

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 10:44
Ja, man kann solche Meldungen deaktivieren, aber mann kann den "Fehler" auch einfach beseitigen.

Und am Einfachsten ist es, wenn man die ungenutzte Variable weglässt.
Oder man macht z.B. ein if cur = nil then ; dahinter und nutzt die Variable.


Ach ja, die Variable weglassen und den Resultwert "ignorieren" geht nur, wenn diese Funktion nicht deaktiviert ist.
Wobei das eigentlich nicht mehr vorkommen sollte, da es nur ein Kompilerschalter für die Unterstüzung von uraltem Code ist. (Abwärtzkompatibilität)
siehe {$X+} / {$EXTENDEDSYNTAX ON}

Und hier gibt es noch das Problem der impliziten Typumwandlung.
Da man hier ja unbedingt das Interface braucht, müsste man ohne die Variable den Typ manuell in ein Interface umwandeln.
Delphi legt bei Zwischenergebnissen und für nicht verwendete Result-Werte eine lokale Variable an, wobei es hier allerdings den Klassentyp verwendet und nicht das Interface.

Also ich hätte da eine Class-Funktion in TWaitCursor eingebaut, welche das Interface als result liefert, womit man sich die manuellen umwandlungen überall erspart und das nur an einer Stelle macht.
[edit] siehe das Beispiel vor mir.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Jun 2014 um 10:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: Hinweis unterdrücken "Auf x zugewiesener Wert wird niemals benutzt"

  Alt 2. Jun 2014, 10:50
Im OP steht doch was von Delphi 7. Gab's da schon class vars, functions und properties?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 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