AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi [TCstmCrl] Änderung an einer Instanz beieinflusst andere...
Thema durchsuchen
Ansicht
Themen-Optionen

[TCstmCrl] Änderung an einer Instanz beieinflusst andere...

Ein Thema von Der_Ventilator · begonnen am 14. Nov 2005 · letzter Beitrag vom 18. Nov 2005
Antwort Antwort
Der_Ventilator

Registriert seit: 11. Apr 2004
Ort: Kanada
136 Beiträge
 
Delphi 2010 Professional
 
#1

[TCstmCrl] Änderung an einer Instanz beieinflusst andere...

  Alt 14. Nov 2005, 14:00
Hi

habe folgendes Problem:

Ich habe eine Komponente von TCustomControl abgeleitet, ihr ein canvas verliehen und daraus eine Art Listbox mit mehreren Spalten erzeugt.

Davon habe ich 2 Instanzen dynamisch im OnCreate auf unterschiedlichen MDI-Formen erstellt.

Die Eigenschaften (z.B. was gerade markiert ist) werden im Implementation-Teil in integer Variablen gespeichert.

Das Problem: Fahre ich mit der Maus über eine Liste, verändert sich der Balken (der dem Mauszeiger nachläuft und einzelne Einträge highlightet) auch auf der anderen Liste!.
Irgendwie sind die beiden Listen verknüft.
So wird z.B auch in der 2. Liste nur der Teil gezeichnet, der der Größe der Liste in der anderen Form entspricht (ich zeichne erst auf ein TBitmap und dann aufs canvas).

Warum sind beide Instanzen nicht unabhängig voneinander?
Codito, ergo sum. - I code therefore I am
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: [TCstmCrl] Änderung an einer Instanz beieinflusst andere

  Alt 14. Nov 2005, 21:32
Die Unit, in der du das abgeleitete Control definiert hast, wird doch insgesamt nur ein einziges mal in deine Application hineingelinkt. Ergo existieren auch die Variablen aus dem Implementation-Teil insgesamt nur ein einziges mal, dh. für alle Controls zusammengenommen gibt es nur einen einzigen Datensatz.

Und um eben gerade diesem deinem Problem zuvorzukommen, sollten solche eigenen Controls ihre Daten daher auch möglichst immer vollständig in sich selbst definiert haben.

Also z.B. so:

Delphi-Quellcode:
  TOwnButton = class(TPanel)
  private
    FBlablaData1 : integert;
    FBlablaData2 : Double;
    FBlablaFlag : boolean;
    ...
  public
    ...
  end;
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Der_Ventilator

Registriert seit: 11. Apr 2004
Ort: Kanada
136 Beiträge
 
Delphi 2010 Professional
 
#3

Re: [TCstmCrl] Änderung an einer Instanz beieinflusst andere

  Alt 17. Nov 2005, 18:48
Also muss ich nur einfach alle Variablen aus dem implementation Teil in den private Teil kopieren.
Einfacher als ich dachte zu lösen.

Für was ist der protected Teil??

Danke für die Hilfe.
Codito, ergo sum. - I code therefore I am
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: [TCstmCrl] Änderung an einer Instanz beieinflusst andere

  Alt 18. Nov 2005, 08:45
Hm, also besser als in der OH kann ich es eigentlich auch nicht erklären:

Zitat:
  • Im public-Abschnitt werden Felder und Methoden deklariert, die keinen Zugriffsbeschränkungen unterliegen. Klasseninstanzen und abgeleitete Klassen können auf diese Felder und Methoden zugreifen. Ein public-Element steht überall dort zur Verfügung, wo die Klasse sichtbar ist, zu der es gehört – d.h. in der Unit, in der die Klasse deklariert ist, sowie in allen anderen Units, die diese Unit verwenden.
  • Im protected-Abschnitt werden Felder und Methoden deklariert, die einigen Zugriffsbeschränkungen unterliegen. Ein protected-Element steht nur in der Unit zur Verfügung, in der die Klasse deklariert ist, sowie in allen Nachkommen der Klasse, unabhängig von der Unit der Nachkommenklassen.
  • Im private-Abschnitt werden Felder und Methoden deklariert, die strengen Zugriffsbeschränkungen unterliegen. Ein private-Element steht nur in der Unit zur Verfügung, in der es deklariert wurde. private-Elemente werden häufig innerhalb einer Klasse verwendet, um andere (public oder published) Methoden und Eigenschaften zu implementieren.
  • Bei Klassen, die von TPersistent abgeleitet sind, werden in einem published-Abschnitt Eigenschaften und Ereignisse deklariert, die zur Entwurfszeit verfügbar sind. Ein published-Element hat dieselbe Sichtbarkeit wie ein public-Element, aber der Compiler erzeugt Laufzeittypinformationen für die published-Elemente. published-Eigenschaften erscheinen zur Entwurfszeit im Objektinspektor.
Wenn Sie ein Feld, eine Eigenschaft oder eine Methode deklarieren, werden die neuen Elemente einem dieser vier Abschnitte hinzugefügt, womit ihre Sichtbarkeit festgelegt wird: private, protected, public oder published.

Nähere Informationen über die Sichtbarkeit finden Sie unter Sichtbarkeit von Klassenelementen .
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#5

Re: [TCstmCrl] Änderung an einer Instanz beieinflusst andere

  Alt 18. Nov 2005, 10:18
Nur mal so am Rande:
TCustomControl hat bereits einen Canvas implementiert (nicht dass du es vielleicht doppelt machst)
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
Der_Ventilator

Registriert seit: 11. Apr 2004
Ort: Kanada
136 Beiträge
 
Delphi 2010 Professional
 
#6

Re: [TCstmCrl] Änderung an einer Instanz beieinflusst andere

  Alt 18. Nov 2005, 18:42
Ich hab einfach property canvas geschrieben um es nutzen zu können.
Codito, ergo sum. - I code therefore I am
  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 10:51 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