Nicht daß ich mich darüber Beschweren möchte ...

Für Fragen von Einsteigern und Programmieranfängern...
AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von AlterMann »

... weil es ja Supi ist, daß es so funktioniert, aber:

Wenn ich als Reaktion auf das Umschalten eines RadioButtons nur folgenden Code eingebe:

Code: Alles auswählen

if RadioButton1.checked then
  begin
   PageControl1.Visible := true;
   PageControl3.Visible := false;
  end
  else
  begin
   PageControl1.Visible := false;
   PageControl3.Visible := true;
  end;
Dann ist -schwuppdiwupp- Die eine PageControl verschunden und die andere Sichtbar. :mrgreen:
Woher weiß das Ding daß ich die Eigenschaft verändert habe?
Durchläuft der Code auf Verdacht alle Properties?
Löse ich ein Ereignis aus, indem ich die Eigenschaft ändere?

Fragen über Fragen ...
Früher war alles besser. Und aus Holz!

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von theo »

AlterMann hat geschrieben: Löse ich ein Ereignis aus, indem ich die Eigenschaft ändere?
Ein Property ändert ja u.U. nicht nur ein Feld sondern kann auch eine Setter- und/oder Getter-Prozedur ausführen.
z.B.

Code: Alles auswählen

private
FVisible: Boolean;  
procedure SetVisible(Value: Boolean); virtual;  
public
property Visible: Boolean read FVisible write SetVisible;
Hier wird beim Lesen nur der Wert eines Feldes zurückgegeben, beim Schreiben aber eine Prozedur aufgerufen.

AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von AlterMann »

theo hat geschrieben: Ein Property ändert ja u.U. nicht nur ein Feld sondern kann auch eine Setter- und/oder Getter-Prozedur ausführen.
Das heißt ein Property ist ein bißchen mehr als eine Variable, aber auch weniger als eine Methode?
Ich denke das hat es bei BP noch nicht gegeben (mir ist es jedenfalls nicht untergekommen).
Früher war alles besser. Und aus Holz!

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von mschnell »

Nö. Eine Property ist eine "setter" Methode (wenn man sie so definiert) und/oder eine "getter" Funktion (wenn man sie so definiert). oder auch einfach nur eine Variable, wenn man weder eine getter Funktion noch eine setter Methode definiert.

Noch Interessanter: eine "Array"-Property kann sogar beliebig viele Parameter an die getter Funktion bzw setter Methode übergeben.

-Michael

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von theo »

AlterMann hat geschrieben: Das heißt ein Property ist ein bißchen mehr als eine Variable, aber auch weniger als eine Methode?
Nö, so kann man das nicht sagen. Es ist eher eine Abstraktionsebene. Es kann ja beides - Feld oder Methode - sein, u.U. auch unterschiedlich für get und set.

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von DiBo33 »

Ich denke das hat es bei BP noch nicht gegeben (mir ist es jedenfalls nicht untergekommen).
Das gab es bereits bei BP (ab welcher Version kann ich dir allerdings nicht sagen, ist schon zu lange her).

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von pluto »

Dann ist -schwuppdiwupp- Die eine PageControl verschunden und die andere Sichtbar. :mrgreen:
Woher weiß das Ding daß ich die Eigenschaft verändert habe?
Wie schon gesagt, die Variable Visible ist eine Eigenschaft. Eigenschaften können besondere Funktionen gegenüber normalen Variablen aufweisen. Z.B. wie in deinem Fall: Können sie die "Komponente", in diesen Fall das PageControl benachrichtigen, dass sich etwas verändert hat und ein komplettes neuzeichnen bewirken. Um ein PageControl unsichtbar oder sichtbar zu machen ist in jedenfall ein nezeichnen der Anwendung nötig.

Um noch eins drauf zu setzten: Das PageControl ist eine Komponente die keine eigene Komponente von Lazarus ist. Sie wird vom unterliegenden Toolkit zuverfügung gestellt. Z.b. von GTK oder von Windows. Eine eigene Komponente von Lazarus währe z.b. das Panel oder das HeaderControl(Einblick in die Zeichen Methode, beweist das eindeutig.).

Es gibt verschiedene Arten von Eigenschaften. Es gibt welche die nur ausgelesen werden können(ReadOnly). oder welche die geschrieben und gelesen werden können. Es gibt auch welche die ein Array übergeben werden kann z.b. so: property items[index:Integer]:Integer read GetItems.
Wobei hier können auch noch verschiedene Parameter angeben werden: property items[index:Integer; str:String]:Integer read GetItems.
Eigenschaften sind recht Sinnvoll. Ich nutzte sie nur noch in meinen Eigenen Klassen. In Verbindung mit Events haben sie sogar noch ein Vorteil. Bei setzten einer Eigenschaft könnte auch ein oder mehrere Events aufgerufen werden, auf die der User reagieren kann.

Ich meine in TP7.0 war das noch anders Implementiert als es heute in FPC der Fall ist. Gab es dort nicht Objekte die mit New erzeugt werden mussten ?
Oder hatte es schon einen kompletten OOP Aufsatz ?
MFG
Michael Springwald

AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von AlterMann »

Vielen Dank an alle für die ausführlichen Erklärungen, das hilft mir fürs Verständnis sehr weiter.
pluto hat geschrieben:
Ich meine in TP7.0 war das noch anders Implementiert als es heute in FPC der Fall ist. Gab es dort nicht Objekte die mit New erzeugt werden mussten ?
Oder hatte es schon einen kompletten OOP Aufsatz ?
Ich würde sagen es hat sich (gut) weiterentwickelt.
Mit new hat man grundsätzlich eine Zeigervariable am Heap angelegt.
OOP war schon implementiert (mit Vererbung, polymorphen Objekten, eben dynamischen Variablen (die durchaus auch Objekte sein konnten)) und die Turbovision-Bibliothek hat auch regen Gebrauch davon gemacht.

Grüße
Christian
Früher war alles besser. Und aus Holz!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von pluto »

Als keiner TIPP: Der Soruce-Code von Lazarus bzw. der LCL ist eine wahre Fundgrube für Lösungen von Problemen. Einfach mal rein schauen...
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von pluto »

Noch eine kleine Anmerkung:

Code: Alles auswählen

if RadioButton1.checked then
  begin
   PageControl1.Visible := true;
   PageControl3.Visible := false;
  end
  else
  begin
   PageControl1.Visible := false;
   PageControl3.Visible := true;
  end;
müsste auch so gehen:

Code: Alles auswählen

PageControl1.Visible :=  RadioButton1.checked;
   PageControl3.Visible := not  RadioButton1.checked;
MFG
Michael Springwald

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von mschnell »

pluto hat geschrieben:Variable Visible ist eine Eigenschaft...
Nichts gegen deutche Beschreibungen, aber die Keywords der Programmiersprache sollten bitte so bleiben wie im Quelltext (hier also "property"), sonst versteht keiner mehr, was gemeint ist. Du sagst ja auch "a - b" und nicht "a weniger b".

Und "Variable" sollte man es bestimmt nicht nennen (sondern eben property). Eine "Property" eines "Objekts" sieht ja auch von außen gar nicht aus wie eine Variable, sondern wie ein "Feld" eines "Records".

-Michael

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von pluto »

Und wie sollte ich Propert's nennen, die keine sind ?
MFG
Michael Springwald

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von mschnell »

pluto hat geschrieben:Und wie sollte ich Propert's nennen, die keine sind ?
"Dinger", die in Objekten z.B. unter Public stehen und keine functions, procedures oder propertys sind, würde ich, wie bei records "Felder" nennen. (Du hast aber Recht, da kann man, wenn man will, var vor schreiben :) .) Ich habe mir aber abgewöhnt so etwas zu verwenden und schreibe lieber

Code: Alles auswählen

private
  FTest: Integer;
public
  property Test: Integer read FTest write FTest;
macht natürlich genau dasselbe wie

Code: Alles auswählen

public
  Test: Integer;
-Michael
Zuletzt geändert von mschnell am Di 29. Dez 2009, 00:23, insgesamt 1-mal geändert.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von pluto »

Code: Alles auswählen

public
  Test: Integer;
Das jedoch ist für mich kein Property sondern eine einfache Variable. Nennen wir sie doch Felder.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Nicht daß ich mich darüber Beschweren möchte ...

Beitrag von RSE »

pluto hat geschrieben:

Code: Alles auswählen

public
      Test: Integer;
Das jedoch ist für mich kein Property sondern eine einfache Variable. Nennen wir sie doch Felder.
Oder auch Member-Variable, um sie von globalen oder lokalen "normalen" Variablen zu unterscheiden. Feld oder Field lässt allerdings am ehesten erahnen, warum ein F vorangestellt wird. Ansonsten ist es doch eigentlich egal, ob man es property oder Eigenschaft, procedure oder Prozedur, function oder Funktion, event oder Ereignis nennt. Man redet ja auch von Variablen und nicht von variables. Als Programmierer sollte man alle diese Worte kennen und verstehen können. Und wenn nicht, kann/muss man eben google benutzen oder nochmal nachfragen.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Antworten