Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prüfen ob in eine Variable geschrieben wurde (https://www.delphipraxis.net/35344-pruefen-ob-eine-variable-geschrieben-wurde.html)

DelphiFreund 5. Dez 2004 21:13


Prüfen ob in eine Variable geschrieben wurde
 
Hi Leute,
wie der Titel aussagt, muss ich wissen, wie ich auf das Ändern einer Variable reagieren kann. Also, wenn ich einem String den Wert "Hallo" gebe, muss eine Funktion, etc. aufgerufen werden. Ich weiss das es geht, denn ich habe es mal gelesen, leider finde ich es nicht mehr :(


Gruß DelphiFreund

jfheins 5. Dez 2004 21:15

Re: Prüfen ob in eine Variable geschrieben wurde
 
Das müsstest du mit einer Property realisieren ...
So einfach mit einer Variablen geht das nicht.

(Oder eine Funktion, die die Variable verändert usw. und dann benutzt du immer die ...)

DelphiFreund 5. Dez 2004 21:18

Re: Prüfen ob in eine Variable geschrieben wurde
 
Stimmt, es war etwas mit Property, ich weiss das das bei Komponenten verwendet wird, aber es muss auch so gehen, und mich würde sehr interessieren wie. Aber dein 2. Vorschlag ist einen Versuch wert, danke.


Gruß DelphiFreund

glkgereon 5. Dez 2004 21:21

Re: Prüfen ob in eine Variable geschrieben wurde
 
das ganze ginge dann so:
Delphi-Quellcode:
TMyClass=Class(TObject)
private
  FMyVariable: string;
  SetMyVariable(NewValue:string);
published
  property MyVariable: string read FMyVariable write SetMyVariable;
end;

implementation

procedure TMyClass.SetMyVariable(NewValue:string);
begin
  FMyVariable:=NewValue;
  //hier reagieren, z.b.
  ShowMessage('FMyVariable wurde geändert!');
end;

DelphiFreund 5. Dez 2004 21:33

Re: Prüfen ob in eine Variable geschrieben wurde
 
Bevor ich es vergesse, geht das auch mit anderen Typen, genauer gesagt auch Boolean? Das mit String war eigentlich nur als beispiel gedacht.

glkgereon 5. Dez 2004 21:35

Re: Prüfen ob in eine Variable geschrieben wurde
 
klar, einfach string überall durch boolean ersetzen

jfheins 5. Dez 2004 21:35

Re: Prüfen ob in eine Variable geschrieben wurde
 
Natürlich, das sahe dann in etwa so aus:
Delphi-Quellcode:
TMyClass=Class(TObject)
private
  FMyVariable: Boolean;
  SetMyVariable(NewValue:Boolean);
published
  property MyVariable: Boolean read FMyVariable write SetMyVariable;
end;

implementation

procedure TMyClass.SetMyVariable(NewValue:string);
begin
  FMyVariable:=NewValue;
  //hier reagieren, z.b.
  ShowMessage('FMyVariable wurde geändert!');
end;

glkgereon 5. Dez 2004 21:36

Re: Prüfen ob in eine Variable geschrieben wurde
 
in der procedure den parameter auf boolean setzen, dann stimmts ;)

DelphiFreund 5. Dez 2004 21:39

Re: Prüfen ob in eine Variable geschrieben wurde
 
Ich hab das mal schnell ausprobiert, dann bekam ich folgende Fehlermeldung:

[Fehler] Unit1.pas(41): Inkompatible Typen: 'Enumeration' und 'String'

Mit allem außer Enumeration kann ich etwas anfangen, aber das hab ich noch nicht gehört. Was kann ich dagegen tun?


Gruß DelphiFreund

jfheins 5. Dez 2004 21:41

Re: Prüfen ob in eine Variable geschrieben wurde
 
Es wäre hilfreich, zumindest die Zeilen 39-43 zu sehen ...

glkgereon 5. Dez 2004 21:42

Re: Prüfen ob in eine Variable geschrieben wurde
 
Zitat:

Mit allem außer Enumeration kann ich etwas anfangen, aber das hab ich noch nicht gehört. Was kann ich dagegen tun?
einfangen und einschläfern lassen würde ich sagen :mrgreen:

<nicht_beachten reason="false_post">
nee, ich bin den qt ma am durchgucken....oder hat der sich wieder verändert?
</nicht_beachten>

also ich würd sagen du versuchst einem string eine aufzählung zuzuweisen...

aufzählung wär sowas:
Delphi-Quellcode:
TEnumeration = (FirstValue, SecondValue);

DelphiFreund 5. Dez 2004 21:45

Re: Prüfen ob in eine Variable geschrieben wurde
 
Ich hab folgende Meldung übersehen:
[Fehler] Unit1.pas(38): ',' oder ':' erwartet, aber '(' gefunden

Der Rest hat damit eigentlich kaum etwas zu tun, aber gern:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, SysUtils, Classes, Controls, Forms, ShellAPI,
  Dialogs, CheckLst, Buttons, ComCtrls, StdCtrls, Menus, XPMan, ExtCtrls;

type
  Itemstruktur = record
    Name: String;
    Checked: Boolean;
  end;
type
  Items = record
    Item: array of Itemstruktur;
  end;
type
  Befehlsstruktur = record
    Name: String;
    Wert: array[0..1] of Integer;
    Zeichen: array[0..1] of String;
  end;

EClass = Class
  private
    FMyVariable: string;
    SetMyVariable(NewValue:string);    // Hier die Fehlermeldung von unten
  published
    property MyVariable: string read FMyVariable write SetMyVariable;
  end;

//Edit:
Könnte es daran liegen? "[Fehler] Unit1.pas(38): ',' oder ':' erwartet, aber '(' gefunden"

//Edit2:
Ich weiss nicht wie du das meinst, und wie sollte das bei Boolean gehen?

DelphiFreund 5. Dez 2004 21:56

Re: Prüfen ob in eine Variable geschrieben wurde
 
Ich habs jetzt mal mit boolean probiert, jetzt macht der Compiler erst richtig Terror:

Zitat:

Fehler] Unit1.pas(40): 'Boolean' ist kein gültiger Typenbezeichner

Und zwar überall wo ich Boolean verwende :wink:

Brüggendiek 5. Dez 2004 22:14

Re: Prüfen ob in eine Variable geschrieben wurde
 
Hallo!

Wie wäre es mit einer korrekten Deklaration als Procedure?

Delphi-Quellcode:
EClass = Class
  private
    FMyVariable: string;
    PROCEDURE SetMyVariable(NewValue:string);    // Hier die Fehlermeldung von unten
  published
    property MyVariable: string read FMyVariable write SetMyVariable;
  end;
Die vorhandene Deklaration war deshalb syntaktisch falsch, weil als Variable deklariert mit der Syntax einer Prozedur.

Gruß

Dietmar Brüggendiek

DelphiFreund 5. Dez 2004 22:27

Re: Prüfen ob in eine Variable geschrieben wurde
 
Achso, ich dachte das gehört so und ist etwas das ich noch nicht kannte.


Gruß DelphiFreund


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