Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 17:29

Foren-Übersicht » Sonstiges » Community-Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 427 Beiträge ]  Gehe zu Seite Vorherige  1 ... 6, 7, 8, 9, 10, 11, 12 ... 29  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 10:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Sidorion schrieb:

Zitat:
Full Ack, mt einer Ausnahme: Die TGUIItems und den Manager von TComponent ableiten und beim Kreieren einer Subnote sich selber als Owner eintragen.
Das hat den Vorteil, dass:
a) wir uns nicht selber um das Zerstüren der Childnodes kümmern müssen und
b) der GUIManager z.B. vom Applikationsobjekt besessen werden kann und man sich nicht um dessen Vernichtung kümmern muss.


Die Diskussion scheint darauf hinauszulaufen. Sind damit alle einverstanden? Bedingt aber, soweit ich das Abschätzen kann, eine kompliziertere Verwaltung. Und bedenkt bitte: Ich habe eine andere Struktur als als die VCL. GENAU SO wirds nicht werden, ich kann mich nur annähern.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 11:46 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Traude hat geschrieben:
Code:
  1. //********************************************************************
  2. // Initialization
  3. Constructor TGUIItem.Create(AName: String; AParent: TGUIItem);
  4. Begin
  5.    Inherited Create;
  6.    FName:= AName;
  7.    FParent:= AParent;
  8.    If FParent <> Nil Then FParent.FGUIItem.Add(Self);
  9.    FGUIItem:= TList.Create;
  10.    .......
  11.    .......
  12. End;
  13. //********************************************************************


Die Create-Variente, wie Du se beschreibt, widerspricht der Objekt-Orientierung. besser wäre folgender Ansatz:
Code:
  1. Constructor TGUIItem.Create(AName: String; AParent: TGUIItem);
  2. Begin
  3.    Inherited Create;
  4.    FName:= AName;
  5.    FParent:=Nil;
  6.    SetParent(AParent);
  7.    FGUIItem:= TList.Create;
  8.    .......
  9.    .......
  10. End;
  11. Procedure TGUIItem.SetParent(APArent: TGUIItem);
  12. Begin
  13.   If Assigned(FParent)
  14.   Then FParent.Unregister(Self);
  15.   FParent:=AParent;
  16.   If Assigned(FParent)
  17.   Then FParent.Register(Self);
  18. End;

Und die Methoden Unregister und Register des Parents manipulieren dann seine FGUIItem.
[edit] Mit SetParent() kann man dann auch nachträglich die GUIItems auf andere Parents verschieben.[/edit]

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 11:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Wieder ein Auszug aus der Delphi Hilfe, betreffen TComponent (ich habe nur die Dinge aufgelistet, die mir als wesentlich erschienen):

Zitat:
Komponenten sind persistente Objekte, die über das folgende Verhalten verfügen:


IDE-Integration. Sie können in einer Palette der IDE angezeigt und in einem Formular-Designer bearbeitet werden.

Wir wollen auch das pure Free Pascal bedienen. Die haben keine IDE.

Zitat:
Eigentümerschaft: Sie können als Eigentümer andere Komponenten verwalten. Wenn die Komponente A der Eigentümer der Komponente B ist, dann ist A für die Freigabe von B verantwortlich, wenn A freigegeben wird..

Das können wir brauchen.

Zitat:
Streaming und Filing. Erweiterungen der von TPersistent geerbten Persistenzfunktionen.

Das könnten wir brauchen, ich neige allerdings zu der Ansicht, dass wir das genausogut selbst machen können und dabei ein wenig mehr Freiheit haben.

Zitat:
COM-Unterstützung. Komponenten können mit den Experten der Windows-Produkte in ActiveX-Steuerelemente oder in andere COM-Objekte konvertiert werden. Komponenten können als Container für COM-Objekte dienen.
Alle Implementierungen von TComponent verfügen über COM-Funktionen, einschließlich jener die in den Linux-Entwicklungs-Tools enthalten sind. Diese Funktionen sind aber nur für Windows-Anwendungen sinnvoll. In dieser Dokumentation sind sie daher mit "Nur Windows" gekennzeichnet. Verwenden Sie diese Funktionen nicht in plattformübergreifenden Anwendungen.

Das können wir definitiv nicht brauchen.


Nur eins von 4 relevanten Dingen. Wäre es nicht sinnvoller, die Art der Verwaltung im TGUIItem nachzubilden? Damit kommen wir zurück auf I0n0s' ursprünglichen Vorschlag ^^.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 11:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
@Sidorion: gefällt mir gut, Dein Vorschlag. Sieht sehr elegant aus. Und man kann dabei schön beim kleinen, einfachen TObject bleiben. Und man versteht es auf Anhieb. Wow!
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 12:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Lossy Ex schrieb:
Zitat:
Zu den ganzen Modellen etc. Das ist ja alles ganz schön und gut. Aber helfen euch diese Techniken wirklich? Wie ich in meinem ersten Post schon gesagt habe richtet sich der Aufbau danach was IHR für Features haben wollt und wo diese GUI eingesetzt werden soll. Es spricht überhaupt nichts dagegen sich von anderen System inspirieren zu lassen. Allerdings sollte ihr nicht vergessen, dass diese Systeme alle nicht auf Spiele ausgelegt sind. Und zu viele Informationen können auch genau den entgegengesetzten Effekt haben wie den den ihr haben wollt. Nämlich einen Überblick zu erlangen. Verliert das nicht aus den Augen.


Du hast natürlich recht. Aber: kennst Du die Peanuts? Da sagt Lucy zu Charlie Brown: "Du musst Dir erreichbare Ziele stecken. Geh auf den Werferhügel, ohne hinzufallen." In dieser Situation bin ich derzeit. :wink:

Ich würde sagen - immer vorbehaltlich, was Tak dazu sagt - für den Anfang wäre ich sehr zufrieden, wenn man ein paar EINFACHE Widgets nachbilden kann. Das Behübschen kann man auf später verschieben. Am Anfang solllte meiner Meinung nach auf Stabilität und Geschwindigkeit der größte Wert gelegt werden, nicht auf Mannigfaltigkeit. Und wir zielen auf ein allgemeines Userinterface, dass auch für Spiele geeignet ist.
Traude


Zuletzt geändert von Traude am Mi Dez 06, 2006 12:53, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 12:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Traude hat geschrieben:
Du hast natürlich recht.

So natürlich ist das nicht. Ein blindes Huhn trinkt auch gerne mal ein Korn. ;-)

Traude hat geschrieben:
Aber: kennst Du die Peanuts? Da sagt Lucy zu Charlie Brown: "Du musst Dir erreichbare Ziele stecken. Geh auf den Werferhügel, ohne hinzufallen." In dieser Situation bin ich derzeit. :wink:

He He. :D Ja kenne ich. Aber man darf natürlich seinen Ball bzw seine Absichten nicht vergessen. Sonst bringt das Erklimmen des Hügels nicht den gewünschten Effekt.

Traude hat geschrieben:
Das Behübschen kann man auf später verschieben. Am Anfang solllte meiner Meinung nach auf Stabilität und Geschwindigkeit der größte Wert gelegt werden, nicht auf Mannigfaltigkeit.

Ich denke man muss dort auch einen Unterschied zwischen Behübschen und spätere echte Features machen. Wobei das größte Problem dabei besteht die echten Features/mögliche Probleme überhaupt erst einmal zu erkennen. Was meinst du warum ich den ersten Versuch meiner GUI verschrottet und noch mal bei 0 angefangen habe. Bestimmt nicht weil ich zu viel Zeit und lange weile habe. ;-) Sondern weil es meinen (vielleicht manchmal unter wagen Umständen womöglich bisschen übertriebenen) perfektionistischen Vorstellungen nicht gerecht wurde.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 13:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Naja, eine GUI ist ja auch nichts Einfaches. Bei mir waren es Datenbanken. Ich hatte vor ziemlich langer Zeit eine Anwendung geschrieben, die dem DBase nachgebildet war. Tja! Das habe ich voriges Jahr wiederholt (allerdings wars nicht mehr DBase), vor allem, weil ich mich über die Borland-Database-Engine geärgert habe. Ich konnte nichts vom ersten Programm verwenden, musste auch alles verschrotten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 13:17 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Noch ein kleiner Vorschlag zu implementierung, die Liste sollte nur erstellt werden, wenn das erste Child hinzugefügt wird. Denn schließlich wird ja nur zu den wenigsten items ein unteritem hinzugefügt.
So ähnlich ist das auch in der DelphiX Spriteengine realisiert.
Code:
  1. constructor TSprite.Create(AParent: TSprite);
  2. begin
  3.   inherited Create;
  4.   FParent := AParent;
  5.   if FParent<>nil then FParent.Add(Self);
  6. end;
  7.  
  8. destructor TSprite.Destroy;
  9. begin
  10.   Clear;//Kinder zerstören
  11.   if FParent<>nil then FParent.Remove(Self);
  12.   FList.Free;
  13.   inherited Destroy;
  14. end;
  15.  
  16. procedure TSprite.Add(Sprite: TSprite);
  17. begin
  18.   if FList=nil then FList := TList.Create;
  19.   FList.Add(Sprite);
  20. end;
  21.  
  22. procedure TSprite.Remove(Sprite: TSprite);
  23. begin
  24.   FList.Remove(Sprite);
  25.   if FList.Count=0 then
  26.   begin
  27.     FList.Free;
  28.     FList := nil;
  29.   end;
  30. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 13:39 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Man könnte Anstelle der TList auch ne TObjectList benutzen, die kann auch ihre Items mitzerstören. Ich weiss allerdings nicht, obs die auch in Freepascal gibt.
Damit hätten wir 2 Punkte vom Tisch:
a) selber ums zerstören der Kinder kümmern,
2. Parent ist dann automatisch immer Owner, was Mißverständnisse bei Unterschieden in Parent<->Owner Hierarchie vermeidet und
III. Wir sparen uns den Component-overhead (Unnötiges COM-Gefummel)
[edit] Die Antwort ist weder a, noch b, noch c, sondern was zum Naschen[\edit]

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 14:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
@Sidorion:

Fürs meucheln der FGUIItems habe ich derzeit folgenden Code:

Code:
  1. //********************************************************************
  2. // Destroys all children
  3. Destructor TGUIItem.Destroy;
  4. Var LocalGUIItem: TGUIItem; I: Integer;
  5. Begin
  6.    With FGUIItem Do If Count > 0 Then For I:= 0 To Count-1 Do Begin
  7.       LocalGUIItem:= FGUIItem[I];
  8.       (LocalGUIItem As LocalGUIItem.Classtype).Free;
  9.    End;
  10.    FGUIItem.Free;
  11.  
  12.    Inherited Destroy;
  13. End;
  14. //********************************************************************


Das heisst: für mich ist damit die Sache eigentlich paletti. :wink:
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 14:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
@The-Winner
Dabei wäre für mich das Kriterium, ob die Liste viel Speicher verschwendet. Dazu muss ich mal in die Unit Classes schaun.
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 14:32 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Wenn Du eine TObjectList nimmst und bei der OwnsObjects auf true ist, schauts so aus:

Code:
  1. //********************************************************************
  2. // Destroys all children
  3. Destructor TGUIItem.Destroy;
  4. Begin
  5.    FGUIItem.Free;
  6.  
  7.    Inherited Destroy;
  8. End;
  9. //********************************************************************


p.s.: wolltest Du den Code nicht leserlich gestalten?

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 15:06 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
@Sidorion: Nun ja, schon, aber ich weiss auch nicht, ob Free Pascal so etwas hat. Dass muss ich erstmal prüfen. Kommt aber auf die ToDo-List.

@The-Winner: zurück aus der Unit Classes kann ich vermelden, dass eine leere Liste zumindest 3x32 Bit oder auch 12 Byte Speicher braucht. Für jedes Item, das keine Kinder hat, werden also 12 Byte Speicher unnötig verbraucht. Für, sagen wir, 100 solche Items sind das also 1200 Bytes (also rund 1k), für einen Bildschirm; scheint mir keine große Verschwendung zu sein, wenn man die heutigen Speichergrößen in Betracht zieht.

Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 15:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
@Sidorion:
Ich habe die TObjectList im Free Pascal gefunden. Sollte gehen. Jetzt wollen wir noch das Plenum fragen.

Hat jemand irgendwas dagegen, statt TList TObjectList zu verwenden? Würden den Code lesbarer machen.
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 06, 2006 15:54 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
qui tacet, prosentire videtur et ceterum censeo Carthaginem esset delendam (Catho, der ältere)

lat.: Wer schweigt, wird als zustimmend angenommen und übrigens bin ich der Meinung, dass Karthago zerstört werden sollte.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 427 Beiträge ]  Gehe zu Seite Vorherige  1 ... 6, 7, 8, 9, 10, 11, 12 ... 29  Nächste
Foren-Übersicht » Sonstiges » Community-Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.018s | 15 Queries | GZIP : On ]