AGB  ·  Datenschutz  ·  Impressum  







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

function für mehrere Units?

Ein Thema von Borschti · begonnen am 3. Mär 2008 · letzter Beitrag vom 4. Mär 2008
Antwort Antwort
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#1

Re: function für mehrere Units?

  Alt 4. Mär 2008, 10:36
Ahnung haben hier ne ganze Menge (zu diesem Problem). Aber genausoviele Varianten der Umsetzung würdest du hier finden. Welche für dich am besten ist, kann man von außen nicht wirklich entscheiden. Das hängt von vielen Faktoren ab:
-aktuelle Struktur des Programmes
-Mögliche Erweiterungen dieses Programmteiles
-persönliche Präferenzen
-...
Deswegen wurden hier mehrere Lösungswege angegeben. Ich versuche mal (mkinzlers +) meinen Vorschlag auszumalen.
Du legst eine extra Unit an:
Delphi-Quellcode:
Unit StringGridNotify;

interface

uses {...,} Grids, Contnrs;

type TStringGridEvent=class
       constructor Create;
       destructor Destroy; override;
      private
       FStringGrids:TObjectList;
      public
       procedure AddStringGrid(aStringGrid:TStringGrid);
       procedure DeleteStringGrid(aStringGrid:TStringGrid);
       procedure Clear;
       //man könnte auch FStringGrids als property rauslegen...
       //und dabei TObjectList vorher noch ableiten

       procedure ChangeTitle(aCol:integer;const aTitle:string);
       //weitere Ereignisse
     end;


//hier mal als globale Variable (eine von vielen Varianten);
//Besser könnte es noch sein, die globale Variable zu vermeiden.
//Aber ich kenne die restliche Programmstruktur nicht.
var StringGridEvent:TStringGridEvent;

implementation

constructor TStringGridEvent.Create;
//Liste für alle StringGrids anlegen
begin
  inherited; //besser is
  FStringGrids:=TObjectList.Create;
  FStringGrids.OwnsObjects:=false;
end;

destructor TStringGridEvent.Destroy;
begin
  inherited;
  FStringGrids.Free;
end;

procedure TStringGridEvent.AddStringGrid(aStringGrid:TStringGrid);
//ein StringGrid "anmelden"
begin
  if FStringGrids.IndexOf(aStringGrid)<0 then
    FStringGrids.Add(aStringGrid);
  //hier evtl. noch die Destroy Methode/Event des Grids umleiten, damit man mitbekommt,
  //wenn ein StringGrid gelöscht wird
end;
procedure TStringGridEvent.DeleteStringGrid(aStringGrid:TStringGrid);
//ein StringGrid "abmelden"
var index:integer;
begin
  index:=FStringGrids.IndexOf(aStringGrid);
  if index>=0 then FStringGrids.Delete(index);
end;
procedure TStringGridEvent.Clear;
//alle StringGrids "abmelden"
begin
  FStringGrids.Clear;
end;


procedure TStringGridEvent.ChangeTitle(aCol:integer; const aTitle:string);
//Beispiel für ein Ereignis:
//Es wird in allen angemeldeten StringGrids der Titel von Spalte aCol
//auf den Parameter aTitle geändert
var i:integer;
begin
  for i:=0 to FStringGrids.Count-1 do
    (FStringGrids.Items[i] as TStringGrid).Cells[aCol,0]:=aTitle;
end;


//weil wir eine globale Variable verwenden noch die 4 Zeilen
initialization
  StringGridEvent:=TStringGridEvent.Create;

finalization
  StringGridEvent.Free;

end.
Das ist nur ein Beispiel. Und ich bin mir zu 99% sicher, dass ich je nach Gegebenheit das noch anpassen würde (Stichworte: siehe Kommentare).
So könnte man es in deinem Beispiel erstmal verwenden. Du musst in jeder Formular-Unit diese Unit einbinden und beim Erstellen der StringGrids diese mit
StringGridEvent.AddStringGrids(...); anmelden.
Dann kannst du beispielsweise die Methode StringGridEvent.ChangeTitle aufrufen, und alle StringGrids bekommen entsprechend des Codes einen neuen Titel.


[rote Kästen habe ich gesehen, ich brauchte halt etwas länger zum Tippen]
[Edit1: Korrekturen zur Verbesserung der Lesbarkeit]
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  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 06:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz