Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Schaltungen eines Schalplans im Speicher abbilden. (https://www.delphipraxis.net/98627-schaltungen-eines-schalplans-im-speicher-abbilden.html)

gunfran 30. Aug 2007 09:29


Schaltungen eines Schalplans im Speicher abbilden.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Tag liebe Leute von Delphi Praxis.

Ich schaue hier schon seit ein paar Wochen rein und da ich gemerkt habe, dass hier viel Kompetenz postet, dachte ich mir ich frag mal nach ob mir hier jemand auf die Sprünge helfen kann.

Ich habe folgendes Problem(e).

1. ich hab sehr wenig Erfahrung in Delphi. ;)

2. möchte ich die Schaltungen eines Schaltplans im Speicher abbilden, um dort möglichst schnell drauf zuzugreifen. Um die etwas zu verdeutlichen, hänge ich einfach mal eine Grafik an. Bei dem Schaltplan handelt es sich um eine Erweiterung einer Stringgrid-Komponente. Wer sich den angehängten Schaltplan einmal angeschaut hat, der sieht in der Aufteilung Rows=Tage und Cols=24 Stunden eines Tages, das dort einige Zahlen in dem Grid stehen. Jede dieser Zahlen soll z.b. eine Werbeschaltung symbolisieren. Wie man sieht können pro Tag und Stunde auch mehrere Schaltungen gesetzt sein.

Eine Schaltungen beinhaltet verschiedene Informationen, wie beispielsweise datum, stunde, länge, preis und noch ein paar.

Nun würde ich gerne erreichen, dass bei einem Klick auf das Grid auf eine Zelle, in der eine oder mehrere Schaltungen gesetzt sind, die Informationen zu den evtl. vorhandenen Schaltungen an anderer Stelle angezeigt werden. (z.b. in einem anderen Grid).

Dazu dachte ich an ein Array, was sozusoagen den Schaltplan abbildet, wo aber an jeder mehr Informationen untergebracht werden können, als in dem Stringgrid und die ich punktgenau ansteuern kann, um mir die Informationen zu der angeklickten Zelle aus dem Speicher holen kann.

Ich hoffe ich habe mich einigermassen klar ausgedrückt, und jemand kann mir da einen Denkanstoss geben.

Wichtig: Ich programmiere hier in Delphi 7 Professional

Meine erste Idee war ein Array aus einem entsprechend der Schaltungsinformation aufgebauten Record. gut? nicht so gut? gehts besser? wenn ja, wie?

Vielen Dank im voraus erstmal

Michael Domscheit

Gruß aus Hamburg

Relicted 30. Aug 2007 09:49

Re: Schaltungen eines Schalplans im Speicher abbilden.
 
huhu und herzlich willkommen hier..

also die stringgrid componente ist ein erweitertes "standard" grid richtig?
die idee mit dem array ist ansich in ordnung, jedoch würde ich vielleicht den weg bevorzugen, welchen z.b. der TreeView benutzt.

du kannst jedem icon einen datapointer zuweisen. das selbe könnte man auch in die einzelnen zellen des grids bauen.. denke ich - bin leider mit dem grid nicht so vertraut aber ist denke ich machbar.

edit: die funktion scheint schon implementiert... baust dir ein objekt mit deinen daten und weist das dann der zelle zu..


Delphi-Quellcode:
Die Eigenschaft Objects enthält für jede Zelle des Gitters ein Objekt.

Delphi-Syntax:

property Objects [ACol, ARow: Integer]: TObject;

C++ Syntax:

__property System::TObject* Objects[int ACol][int ARow] = {read=GetObjects, write=SetObjects};

Beschreibung

Mit Objects können Sie auf das Objekt zugreifen, das einer bestimmten Gitterzelle zugeordnet ist. Die Eigenschaften ColCount und RowCount legen die Größe des Arrays fest. ACol gibt die Spalte, ARow die Zeile der Zelle an. Die Zählung der Spalten und Zeilen beginnt bei 0.

Hinweis:   Das String-Gitter ist den Objekten in diesem Array nicht übergeordnet. Wenn das String-Gitter freigegeben wird, existieren die Objekte weiter. Sie müssen explizit von der Anwendung freigegeben werden.

gruß
Reli

s-off 30. Aug 2007 10:05

Re: Schaltungen eines Schalplans im Speicher abbilden.
 
Vielleicht folgendes als Ansatz:

Delphi-Quellcode:
Unit Unit1;

Interface

Uses
   Windows,
   Messages,
   SysUtils,
   Variants,
   Classes,
   Graphics,
   Controls,
   Forms,
   Dialogs,
   StdCtrls,
   Grids;

Type
   TForm1 = Class(TForm)
      StringGrid1: TStringGrid;
      Button1: TButton;
      Procedure Button1Click(Sender: TObject);
      Procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
         Var CanSelect: Boolean);
   private
      { Private-Deklarationen }
   public
      { Public-Deklarationen }
   End;

   TSchaltung = Record
      dDatum: TDate;
      iStunde: Integer;
      iLaenge: Integer;
      cPreis: Currency;
      sDiv: String;
   End;

   TSchaltungen = Class(TObject)
   private
      Container: Array Of TSchaltung;
   End;

Var
   Form1: TForm1;

Implementation

{$R *.dfm}

Procedure TForm1.Button1Click(Sender: TObject);
Var
   Schaltungen: TSchaltungen;
   Schaltung1: TSchaltung;
   Schaltung2: TSchaltung;
Begin
   Schaltungen := TSchaltungen.Create;

   Schaltung1.sDiv := 'Diverser Text zu Schaltung 1';
   Schaltung2.sDiv := 'Diverser Text zu Schaltung 2';

   SetLength(Schaltungen.Container, 2);
   Schaltungen.Container[0] := Schaltung1;
   Schaltungen.Container[1] := Schaltung2;

   StringGrid1.Objects[1, 1] := Schaltungen;
End;

Procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; Var CanSelect: Boolean);
Begin
   ShowMessage(TSchaltungen(StringGrid1.Objects[1, 1]).Container[0].sDiv);
End;

End.
Edit: Erläuterung
Du hast eine Klasse abgeleitet von TObject. Du erzeugst für jede StringGrid-Zelle, für welche Du eine Schaltung hinterlegen willst, eine Instanz dieser Klasse.
Die Klasse beinhaltet einen Container; nämlich Dein Array, welches Records speichert, welche jeweils eine Schaltung repräsentieren.

Ich würde nun so vorgehen, dass ich eine Zelle auswähle. Dann klicke ich in einer Toolbar o.ä. einen Edit-Knopf, welcher einen Dialog öffnet. Dort werden dann die Schaltungen für diese Zelle angelegt/editiert.
In diesem Moment erzeugst Du also ein Objekt vom Typ TSchaltungen und für jede Schaltung einen record TSchaltung.

Alle Schaltungen legst Du in Deinem Array ab und ordnest Dein Objekt der aktuellen Zelle zu. Als Wert zeigst Du dann die Anzahl Schaltungen in Deinem Container an.

Sorry, wenn das etwas wirr klingt - ich hoffe, Du kommst damit klar :?

gunfran 30. Aug 2007 10:33

Re: Schaltungen eines Schalplans im Speicher abbilden.
 
zuerst einmal vielen Dank für die rasanten Antworten.

Ich werde mich nun erstmal hinsetzen und versuchen mir die Denkansätze begreiflich zu machen und mal testweise zu probieren, ob das was ist.

Melde mich dann nochmal wieder.

Spitzenhilfe erstmal, vielen Dank.

gunfran 30. Aug 2007 13:27

Re: Schaltungen eines Schalplans im Speicher abbilden.
 
Eine kleine Übung mit dem zweiten Lösungsansatz hat vermeintlich zu tollen Ergebnissen geführt.

Ich danke dir sehr für diese gute Hilfe.

Jetzt werd ich mich mal ransetzen und das versuchen im "Ernstfall" einzusetzen.

Noch eine Frage. Wenn das funktioniert, wie schalte ich dann ab, dass die Frage geklärt ist? Beim erstellen des Threads wurde ich darauf hingewiesen, dass bei Klärung des Problems, ich dies selber machen muss, kann dies auf dem ersten Blick allerdings noch nicht erkennen.

Edit: Alles klar, ich musste mal meine Brille putzen. ;)

Relicted 30. Aug 2007 13:35

Re: Schaltungen eines Schalplans im Speicher abbilden.
 
neue frage neues thema! :-)

ne quatsch... musst deinen ersten post editieren und den haken rausmachen

gruß
reli

gunfran 30. Aug 2007 13:52

Re: Schaltungen eines Schalplans im Speicher abbilden.
 
Zitat:

Zitat von Relicted
neue frage neues thema! :-)

ne quatsch... musst deinen ersten post editieren und den haken rausmachen

gruß
reli

ich dachte, dafür ist unter dem Thread der Button "erledigt" ??

Relicted 30. Aug 2007 13:55

Re: Schaltungen eines Schalplans im Speicher abbilden.
 
stimmt auch wieder :-) ich war diesmal bissl verpeilt... falsches forum :-p

s-off 30. Aug 2007 14:01

Re: Schaltungen eines Schalplans im Speicher abbilden.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab noch nen kleines kommentiertes Beispiel (kann Fehler enthalten :mrgreen:) eingefügt (hatte nicht gesehen, dass bereits alles paletti ist).

Edit:
Dieses Beispiel legt bei Klick auf Button in der aktuell selektierten Zelle eine zufällige Anzahl Schaltungen (maximal 5 je Zelle) an - hatte keine Lust, das Ganze noch editierbar zu machen.
Sobald die Zelle danach erneut selektiert wird, werden die darin enthaltenen Schaltungen in einer Message ausgegeben.

Edit2:
Kleinen - aber elementaren - Fehler im Beispiel behoben.

Edit3:
Wieviele Fehler man im Nachinein doch noch findet... :mrgreen:

s-off 9. Sep 2007 13:14

Re: Schaltungen eines Schalplans im Speicher abbilden.
 
Hallo gunfran,

mich würde interessieren, wie Du Dein Problem letztendlich gelöst hast.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.
Seite 1 von 2  1 2      

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