AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TImage/TRichEdit erstellen - was heisst Owner und Parent?
Thema durchsuchen
Ansicht
Themen-Optionen

TImage/TRichEdit erstellen - was heisst Owner und Parent?

Ein Thema von Reinhard Kern · begonnen am 29. Nov 2006 · letzter Beitrag vom 30. Nov 2006
Antwort Antwort
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#1

TImage/TRichEdit erstellen - was heisst Owner und Parent?

  Alt 29. Nov 2006, 17:38
Hallo,

zum Ausdrucken von Bitmaps verwende ich ein TImage, das ich "from the scratch" neu erzeuge, weil es anderweitig ja nicht benötigt wird:

Delphi-Quellcode:
   TBPMLogo = class (TObject)
     DummyImage : TImage;
{...}

procedure TBPMLogo.Assign (PFName : ShortString; IOwner : TComponent);
begin
if not Assigned (DummyImage) then DummyImage := TImage.Create (IOwner);
{...}

procedure TBPMLogo.Done;
begin
if Assigned (DummyImage) then FreeAndNil (DummyImage);
{...}

PrinterLogo.Assign (ExtFile,self);
Self ist das Hauptformular, und das Ganze funktioniert auch wie man es nach der Hilfe erwarten würde. Versuche ich jedoch das gleiche mit einem RicheEdit-Control, erhalte ich verschiedene Exceptions beim Zugriff auf das Control. Nach Suchen in Delphiforen und Google habe ich ergänzt:

Delphi-Quellcode:
procedure TBPMPaper.Assign (PFName : ShortString; ROwner : TForm);
begin
if not Assigned (DummyRE) then DummyRE := TRichEdit.Create (nil);
DummyRE.Parent := ROwner;
{...}
So weit so gut, aber mir fehlt die Erklärung dazu: wann wird Owner gebraucht, wann Parent, oder sollte man immer beides setzen und es ist reiner Zufall, dass TImage auch ohne Parent funktioniert? Wer weiss was genaues?

Danke, Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TImage/TRichEdit erstellen - was heisst Owner und Parent

  Alt 29. Nov 2006, 17:45
Zitat von Reinhard Kern:
So weit so gut, aber mir fehlt die Erklärung dazu: wann wird Owner gebraucht, wann Parent, oder sollte man immer beides setzen und es ist reiner Zufall, dass TImage auch ohne Parent funktioniert? Wer weiss was genaues??
Theoretisch sollte jedes Control auch ohne Parent funktionieren. Jedoch erwarten manche Controls das sie in einem anderen Control liegen (z.B. einem Formular) und darüber manche "Schweinerein" bezüglich Windows-Messaging veranstalten (Der IE ist auch ein solcher Kanditat) um manche Funktionalität bereitzustellen
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: TImage/TRichEdit erstellen - was heisst Owner und Parent

  Alt 29. Nov 2006, 18:09
Du brauchst prinzipiell beides nicht.

Ein Owner kümmert sich darum, dass die Komponente freigegeben wird, ein Parent dient als Container für eine Komponente. Die meisten Controls funktionieren nur mit einem Parent, einen Owner braucht keine.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: TImage/TRichEdit erstellen - was heisst Owner und Parent

  Alt 29. Nov 2006, 18:46
Zitat von 3_of_8:
Ein Owner kümmert sich darum, dass die Komponente freigegeben wird
Hi,
ich möchte hier nur das wort automatisch ergänzen. Wird eine Komponente A freigegeben, so werden vorher alle Komponenten deren Owner A ist frei gegeben. Du brauchst in dem Fall kein Free aufzurufen.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TImage/TRichEdit erstellen - was heisst Owner und Parent

  Alt 29. Nov 2006, 21:22
Moin Manuel,

Zitat von 3_of_8:
Die meisten Controls funktionieren nur mit einem Parent,
funktionieren tun sie schon, man hat aber meist nicht viel davon, da sie ohne Parent nicht angezeigt werden...
Alle Positionsangaben verstehen sich relativ zum Parent.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#6

Re: TImage/TRichEdit erstellen - was heisst Owner und Parent

  Alt 30. Nov 2006, 09:42
Hallo,

Danke an alle, ist jetzt schon viel klarer, z.B. warum Owner = nil einwandfrei funktioniert: ich verwalte ja alles selbst. Als überzeugter Anhänger defensiven Programmierens werde ich wohl in Zukunft jedem neugeborenen Control Owner UND Parent spendieren, damit bin ich mit dem Verhalten des Controls auf der sicheren Seite, und Schaden kann man wohl nicht damit anrichten.

Dass Parent (manchmal) gebraucht wird, ist eine wichtige Information, die die Online-Hilfe irgendwo in der Gegend um TControl.Create liefern sollte - um es vorsichtig zu formulieren, die Borland-Hilfe lässt schon noch einigen Spielraum für Verbesserungen. Ich persönlich hätte das Setzen von Parent mit ins Create aufgenommen.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: TImage/TRichEdit erstellen - was heisst Owner und Parent

  Alt 30. Nov 2006, 13:18
Zitat von Christian Seehase:
Moin Manuel,

Zitat von 3_of_8:
Die meisten Controls funktionieren nur mit einem Parent,
funktionieren tun sie schon, man hat aber meist nicht viel davon, da sie ohne Parent nicht angezeigt werden...
Alle Positionsangaben verstehen sich relativ zum Parent.
Also für mich "funktioniert" ein Edit ohne Parent nicht, weil man halt nicht das machen kann, was man normalerweise mit einem Edit macht: Den Benutzer reinschreiben lassen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:45 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