Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
21.05.2012, 12:23:28
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Einsteiger Forum
| | |-+  ... kann mir das jemand Implementieren ?
« vorheriges nächstes »
Seiten: [1] 2 Drucken
Autor Thema: ... kann mir das jemand Implementieren ?  (Gelesen 3269 mal)
Meister
Jr. Member
**
Offline Offline

Beiträge: 64



« am: 21.09.2002, 12:40:37 »

Guten Mittag,

Poroblem: Gegeben sie eine Variable a und eine weitere Variable b. Es muss immer gelten b = a, auch wenn a sich ändert.

danke ...
Gespeichert

Wozu das Rad neu Implementieren?
Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #1 am: 21.09.2002, 13:51:15 »

wenn sie immer gleich sein muss...dann nimm doch nur 1 variable...
Gespeichert

Meister
Jr. Member
**
Offline Offline

Beiträge: 64



« Antworten #2 am: 21.09.2002, 14:00:30 »

... das möchte ich aber nicht.

wenn a zum beispiel "StatusPanel.Caption" ist und b "VariableMitDemStatusString" dann geht das ja nicht, wenn man nicht auf b verzichten will.
Gespeichert

Wozu das Rad neu Implementieren?
Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #3 am: 21.09.2002, 14:12:51 »

wozu brauchst du dann b? ist ja immer dasselbe wie a, also kannst du theoretisch auch auf a zugreifen...oder nicht?
Gespeichert

Meister
Jr. Member
**
Offline Offline

Beiträge: 64



« Antworten #4 am: 21.09.2002, 18:37:50 »

Das ist logisch! Aber Programmierteschich nicht immer erwünscht.
Gespeichert

Wozu das Rad neu Implementieren?
Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #5 am: 21.09.2002, 19:55:55 »

ich glaub ich weiss, was du meinst...aber du kannst ja kurz vor jenen befehlen die variable b neu zuweisen
Gespeichert

Meister
Jr. Member
**
Offline Offline

Beiträge: 64



« Antworten #6 am: 22.09.2002, 14:21:56 »

... ja und so mache ich das bis jetzt auch immer, jedesmal wenn ich a verändere setze ich dann b := a; - aber wenn ich a an ganz vielen sellen verändere, oder zum beispiel b ausserhalb des sichtbarkeis bereches von a ist, oder wenn ich einfach nicht jedes mal b setzen will, wenn ich a setze, dann muss es doch dafür eine bessere lösung geben!
Gespeichert

Wozu das Rad neu Implementieren?
marian19
Full Member
***
Offline Offline

Beiträge: 248



« Antworten #7 am: 22.09.2002, 17:55:54 »

benutze ein timer der jede sekunde/minute/stunde b:= a; macht
Gespeichert

Veni Vidi Vici
MR321
Sr. Member
****
Offline Offline

Beiträge: 363


« Antworten #8 am: 22.09.2002, 19:04:46 »

Du könntest auch mit Pointern arbeiten!
Gespeichert

Computers are like air conditioners, they stop working immediately, if you open windows.
Meister
Jr. Member
**
Offline Offline

Beiträge: 64



« Antworten #9 am: 22.09.2002, 21:45:05 »

@marian19

ja, mit den timern habe ich mir das auch immer so zurechtgefummelt, aber das ist nicht wirklich befriedigend. Denn wenn man auf Methoden oder Eigenschaften von Klassen zugreift passiert es schonmal ganz geren, dass was refereziert wird was gar nicht merh existiert. Ausserdem werden damit viele Operationen pro zeiteinheit überflüssig ausgeführt. - und sowieso hat mir diese methode schon viele unerklärliche exeptions eigebracht.

@MR321

Pointer. Ich glaube das ist ne möglichkeit. Nur habe ich mich an dem Thema immer so vorbeigeschummelt wiel meine pointerexperimente immer auf irgendeinen speichermüll gezeigt haben. Wie würde man den zum Baispeil "Panel1.Caption" ( unse b ) auf "StringMitDerAnzeige" (a)zeigen lassen, so dass "Panel1.Caption" immer gleich "StringMitDerAnzeige" ist?

anders gefragt: wer kann "mit Pointern arbeiten" ?
Gespeichert

Wozu das Rad neu Implementieren?
marian19
Full Member
***
Offline Offline

Beiträge: 248



« Antworten #10 am: 22.09.2002, 21:56:50 »

ich wurde auch lieber das mit dem pointer machen....
Gespeichert

Veni Vidi Vici
gitzi
Full Member
***
Offline Offline

Beiträge: 167



« Antworten #11 am: 22.09.2002, 22:30:17 »

Ich würde den Variablen a und b nicht immer explizit mit
a:= 0815;
b:= 0815;
zuweisen, sondern die Zuweisung durch eine Prozedur vornehmen:

procedure TForm1.SetAB(wert:integer);
begin
  a:= wert;
  b:= wert;
end;

...
irgendwo im Programm dann:

SetAB(33 * andere_variable - 5);  // setzt immer die beiden                                                       // globalen Variablen a und b

So kannst Du Dir sicher sein, dass a und b immer dengleichen Wert besitzen
Gespeichert
Lemy
Hero Member
*****
Offline Offline

Beiträge: 605



« Antworten #12 am: 23.09.2002, 09:46:57 »

Weiss zwar nicht was es bringen soll.
Code:

Var

  a: integer;

  b: integer absolute a;

Gespeichert
Meister
Jr. Member
**
Offline Offline

Beiträge: 64



« Antworten #13 am: 24.09.2002, 23:54:54 »

@gitzi

Das ist so einfach, wie effizient! ich muss sagen das gelällt mir. Es gibt aber auch situationen, in denen das nicht geht. wenn ich zum beispeil ein Klasse Mache und in meinem Hauptformular eine Instanz dieser klasse bilde, dann kann beim setzen einer Varibale in der Klasse ( a ) nicht eine Eigenschaft meines Hauptformulars ( b ) gesetzt werden, es sei denn, man übergibt die Eigenschaft des Hauptformulars an die klasse oder es gibt eine möglichkeit die mir nicht bekannt ist. ... aber ich werde mal versuchen meine probleme mit dieser Prozedur-methode zu lösen

@Lemy

... ich auch nicht. Hab grade mal in die hilfe geguckt was absolute ist, aber da steht da steht irgedwas davon, dass das nur für Low-Level-Programmierung ist ( Treiber und so )

@marian19

... brachen wir nur noch jemand, der uns das mit den Pointern mal erklärt!
Gespeichert

Wozu das Rad neu Implementieren?
gitzi
Full Member
***
Offline Offline

Beiträge: 167



« Antworten #14 am: 25.09.2002, 08:23:51 »

Man könnte die Prozedur verallgemeinern, indem man anstatt in der Proc globale Vars zu setzen, dieser die Vars einfach als VAR-Parameter übergeben:

procedure SetAB(VAR a:integer; VAR b:integer; wert:integer);
begin
  a:= wert;
  b:= wert;
end;

Bei dieser Form der Parameterübergabe wird keine lokale Kopie der mit VAR deklarierten Variablen erzeugt, sondern es wird die Adresse der Variablen übergeben und in der Proc dann dadurch praktisch mit dem "Original" gearbeitet. Daher sind die Änderungen in der Proc dann auch in der aufrufenden Prozedur sichtbar.

Man müsste halt diese Proc wahrscheinlich in der Klassendefinition anführen, sonst dürfte sie nicht bekannt sein.
Gespeichert
Meister
Jr. Member
**
Offline Offline

Beiträge: 64



« Antworten #15 am: 26.09.2002, 12:28:01 »

@gitzi

Das würde das Klassenproblem aber nicht lösen, denn wenn die Klasse SetAB aufruft um a zu setzen müssete sie auch b übergeben, von b weiss sie aber gar nichts. Also kann man die veralgemeinerte Methode SetAB auch nur da aufrufen wo a und b bekannt sind. und da beisst sich die katze dann in den schwanz.
Gespeichert

Wozu das Rad neu Implementieren?
gitzi
Full Member
***
Offline Offline

Beiträge: 167



« Antworten #16 am: 26.09.2002, 14:01:17 »

ich ging natürlich davon aus, dass dort wo a vorkommt, auch b mit dabei ist u.u.  anscheinend ist das aber nicht der fall.

es ist natürlich schwer, eine Variable anzusprechen, die gar nicht deklariert ist.

wenn ich das jetzt richtig verstanden habe, schwebt dir also vor, die variable b (die anscheinend eine systemweit herausragende Stellung einnimmt) von beliebigen Programmteilen aus anzusprechen?
Gespeichert
Joern
Newbie
*
Offline Offline

Beiträge: 44



« Antworten #17 am: 26.09.2002, 14:23:01 »

Auch eine Möglichkeit...

[font  size=2 face="Courier New" color="#000000"]unit Unit1;

interface

uses
  
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  
TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    
[font color="#000080"]{ Private declarations }
    
[/font]Fa : Integer;
    procedure SetA(aa : Integer);
  public
    
[font color="#000080"]{ Public declarations }
    
[/font]b : Integer;
    property a : Integer read Fa write SetA;
  end;

var
  
Form1: TForm1;

implementation

procedure 
TForm1.SetA(aa : Integer);
begin
  
b  := aa;
  Fa := aa;
end;

[font color="#000080"]{$R *.dfm}

[/font]procedure TForm1.Button1Click(Sender: TObject);
begin
  
a := 4711;
  ShowMessage('a = '+IntToStr(a)+#13#10+'b = '+IntToStr(b));
end;

end.

[/font]

Gruss, Jörn
Gespeichert
Meister
Jr. Member
**
Offline Offline

Beiträge: 64



« Antworten #18 am: 28.09.2002, 16:23:47 »

Auf der Endlosen suche nach der lösung für diese Problem bin ich hie drauf gestoßen:

Code:

unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;



type

  TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);



  private

    { Private declarations }

    procedure OnIdle(Sender: TObject; var Done: Boolean);

  public

    { Public declarations }

  end;



var

  Form1: TForm1;

  a, b : Integer;



implementation



{$R *.dfm}



procedure TForm1.OnIdle(Sender: TObject; var Done: Boolean);

begin

 b := a;

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

  Application.OnIdle := OnIdle;

end;



procedure TForm1.Button1Click(Sender: TObject);

begin

 a := 12;

end;



procedure TForm1.Button2Click(Sender: TObject);

begin

 ShowMessage('a = '+IntToStr(a)+#13#10+'b = '+IntToStr(b));

end;





end.


was mein Ihr, wenn man erst button1 drückt und dann Button2 was steht dann wohl in der Messagebox?
Gespeichert

Wozu das Rad neu Implementieren?
gitzi
Full Member
***
Offline Offline

Beiträge: 167



« Antworten #19 am: 28.09.2002, 17:51:46 »

jaja da kann man nur hoffen dass der computer net viel zu tun hat  ;-)
Gespeichert
Seiten: [1] 2 Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS