Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi function für mehrere Units? (https://www.delphipraxis.net/109555-function-fuer-mehrere-units.html)

Aurelius 4. Mär 2008 09:03

Re: function für mehrere Units?
 
Test wird bei euch 3 mal deklariert, obwohl ihr wahrscheinlich nur 1 nutzen wollt.

Borschti 4. Mär 2008 09:52

Re: function für mehrere Units?
 
keiner eine ahnung ? :cry:

also wir haben uns gedacht das es möglich wäre das aktuelle form zu aktivieren statt form13 zu benutzen nur wissen wir den Befehl dafür nicht vielleicht kennt den ja jemand von euch wir welzen uns grade durch bücher.
Was wir erreichen wollen: auf jedem Konfigurationsformular ist das Edit5 feld gleich und dient zum einlesen des spalten namens. Wenn wir nun also diesen String immer aus dem aktuellen Editfeld einlesen fallen viele anweisungen weg

Aurelius 4. Mär 2008 10:04

Re: function für mehrere Units?
 
Die Frgaber verstehe ich nicht so ganz...

Wenn man von einer anderen Form /unit zugreifen kann man das so machen
1.) procedure-kopf in den Public-abschnitt reinschreiben, z.b. procedure Bla;
2.) vor die procedure im implemnatation-Teil den Klassennamen schreiben, z.b. procedure TForm1.Bla;
3.) die Unit, in der das steht, in den "uses"-Abschnitt der fremden form eingliedern, z.b. uses Uni2
4.) auf die procedure mit Form1.Bla zugreifen

mkinzler 4. Mär 2008 10:06

Re: function für mehrere Units?
 
Auf die Gefahr hin, das ich mich wiederhole
http://www.delphipraxis.net/internal...=853781#853781

sirius 4. Mär 2008 10:36

Re: function für mehrere Units?
 
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
Delphi-Quellcode:
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]

WS1976 4. Mär 2008 12:14

Re: function für mehrere Units?
 
Hallo,
ich bin ja mit mkinzler nicht oft einer Meinung aber hier hat er Recht.

Delphi-Quellcode:
procedure TForm13.ColorButton6Click(Sender: TObject);
begin

ProcessGrid (TStringGrid, 1); //<---  Hier tritt der Fehler Auf
Überlegt mal was Tstringrid ist? Eine Klasse (Klassendefinition Tstringgrid).

Ihr übergebt hier einen Klassenbezeichner.
ProcessGrid (TStringGrid, 1); //<--- Hier tritt der Fehler Auf
Ihr müsst schon das Grid selbst übergeben.
Das ist etwa so als wenn du in eine Autowerkstatt gehst und sagst repararier AUTOS.
Du musst ihm schon sagen was für ein Auto.
So ähnlich muss das aussehen:
ProcessGrid (StringGrid1, 1); //<--- Hier tritt der Fehler Auf

Grüsse
Rainer

s-off 4. Mär 2008 12:20

Re: function für mehrere Units?
 
Hallo Rainer,

[OT]
nur zum Verständnis; warum antwortest Du auf etwas, was bereits seit einem dreiviertel Tag geklärt ist? :zwinker:
[/OT]

sirius 4. Mär 2008 12:24

Re: function für mehrere Units?
 
[OT]

Zitat:

Zitat von s-off
Hallo Rainer,

nur zum Verständnis; warum antwortest Du auf etwas, was bereits seit einem dreiviertel Tag geklärt ist? :zwinker:

Weil da vielleicht der Seitenumbruch kam :mrgreen: Passiert mir auch gelegentlich.
[/OT]

Nuclear-Ping 4. Mär 2008 13:10

Re: function für mehrere Units?
 
[OT]
Zitat:

Zitat von sirius
[OT]

Zitat:

Zitat von s-off
Hallo Rainer,

nur zum Verständnis; warum antwortest Du auf etwas, was bereits seit einem dreiviertel Tag geklärt ist? :zwinker:

Weil da vielleicht der Seitenumbruch kam :mrgreen: Passiert mir auch gelegentlich.
[/OT]

Yup, vorallem weil du auf der Seite hier fast nochmal genau das gleiche - nur etwas mehr aufgeblasen - als Beispiel vorgibst, was ich auf der vorigen Seite gestern schon tat, nur ziemlich abgespeckt: http://www.delphipraxis.net/internal...=853740#853740
[/OT]

sirius 4. Mär 2008 13:23

Re: function für mehrere Units?
 
Zitat:

Zitat von Nuclear-Ping
Yup, vorallem weil du auf der Seite hier fast nochmal genau das gleiche -

Nö, mein Konzept ist anders.
Es ist mehr OOP und vor allem beachtet es besonders diese Forderung:
Zitat:

Zitat von Borschti
bei einem Klick auf einen Button(z.B. +1 Zeile), 4 StringGrids auf 4 verschiedenen Formularen zu verändern



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 Uhr.
Seite 3 von 4     123 4      

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