AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Komponente "vergißt" OI-Einstellung

Ein Thema von freejay · begonnen am 5. Jan 2007 · letzter Beitrag vom 9. Jan 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Eigene Komponente "vergißt" OI-Einstellung

  Alt 6. Jan 2007, 18:12
ich würde einfach zusätzlich noch das OnChange der Stringlist belegen. Denn man ist nicht gezwungen eine komplette Stringlist zu zuweisen sondern kann auch einfach über Stringlist.Strings etc. den Inhalt ändern und dann passiert bei deiner Komponente rein gar nix.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
269 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Eigene Komponente "vergißt" OI-Einstellung

  Alt 9. Jan 2007, 13:00
Hallo Leute,

leider bin ich noch keinen Schritt weiter gekommen. Das von mir hinzugefügte Feld FColumnHeader ist während des Create-Ereignisses noch nicht gefüllt (die Daten aus dem dfm-File stehen noch nicht drin): Ist ja auch logisch, da wird das Feld ja auch erst erzeugt (siehe Code oben). Wenn das Programm, in dem ich diese Komponente verwende läuft, kann ich aber den Inhalt von ColumnHeader auslesen und er ist auch korrekt. Erkenntnis: Der Code meiner Zuweisungsroutine SetColumnHeader wird beim Programmstart nicht durchlaufen, das Feld FColumnHeader aber trotzdem gefüllt!

Die gut gemeinten Ratschläge an allen möglichen Stellen Repaint, Invalidate oder Ähnliches einzufügen, können also nichts bewirken, da die Zuweisungsroutine selbst offenbar nicht aufgerufen wird.

Müsste die nicht von der IDE bzw. der VCL aufgerufen werden, wenn die Daten aus dem OI in die Komponente übertragen werden?

  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Eigene Komponente "vergißt" OI-Einstellung

  Alt 9. Jan 2007, 13:12
hast du das von mir geschriebene beachtet? Im Moment rufst du SetColumnHeader schließlich nur auf wenn direkt eine Stringliste zugewiesen wird aber nicht wenn die Stringliste einfach geändert wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#14

Re: Eigene Komponente "vergißt" OI-Einstellung

  Alt 9. Jan 2007, 13:14
Hallo,
Du musst die Loaded Methode überschreiben. Die Direktive stored bewirkt lediglich, dass die property auch gespeichert wird
wenn sie den Defaultwert enthält.
Delphi-Quellcode:
TMyStringGrid = class(TStringGrid)
  private
    FColumnHeader: TStrings;
    procedure SetColumnHeader(Value: TStrings);
    procedure FillHeader;
  protected
    procedure Loaded; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property ColumnHeader: TStrings read FColumnHeader write SetColumnHeader;
  end;

constructor TMyStringGrid.Create(AOwner: TComponent);
begin
    inherited create(AOwner);
    FColumnHeader := TStringList.Create;
end;

destructor TMyStringGrid.Destroy;
begin
    FColumnHeader.Free;
    inherited destroy;
end;

procedure TMyStringGrid.SetColumnHeader(Value: TStrings);

begin
    FColumnHeader.Assign(Value);
    FillHeader;
end;

procedure TMyStringGrid.Loaded;
begin
  inherited Loaded;
  FillHeader;
end;

procedure TMyStringGrid.FillHeader;
var
    iCol: integer;
begin


    for iCol := 0 to ColCount - 1 do

        if iCol < FColumnHeader.Count then
            Cells[iCol,0] := FColumnHeader[iCol]
        else
            Cells[iCol,0] := '';
end;
I come from outer space to save the human race
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
269 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Eigene Komponente "vergißt" OI-Einstellung

  Alt 9. Jan 2007, 13:25
Yes! Vielen Dank für den Tip!

Das Überschreiben von "Loaded" lädt mir die Spaltenüberschriften jetzt beim Starten des Programms.

Aber leider werden die Spaltenüberschriften nach dem Neu-Laden des Projektes nach wie vor nicht angezeigt

NACHTRAG: Funktioniert jetzt doch "in allen Lebenslagen" (hatte vergessen mein Package zu aktualisieren...).

Vielen Dank noch mal!

Freejay
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 01:42 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