AGB  ·  Datenschutz  ·  Impressum  







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

FindComponent in einem Frame

Ein Thema von Ykcim · begonnen am 28. Jan 2014 · letzter Beitrag vom 28. Jan 2014
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
 
Delphi 10.4 Sydney
 
#1

FindComponent in einem Frame

  Alt 28. Jan 2014, 11:14
Hallo Zusammen,

ich habe in einem Frame ein StringGrid und ein PageControl. Ich möchte gerne, dass wenn ich ich auf einen Eintrag in dem StringGrid klicke, dass er dann die richtige Seite auf dem PageControl wählt. Der Name des TabSheets auf dem PageControl lautet 'TabSheet_'+den ausgewählten Zelleninhalt.

Leider bekomme ich das nicht ans laufen. Das fängt schon damit an, dass ich dem FindComponent nicht das Frame als Ausgangsobjekt geben kann.

Ich hatte dann Folgendes (vergeblich) versucht:
   Page_HelpList.ActivePage:=Page_HelpList.FindComponent(('TabeSheet_'+Grid_HelpList.Cells[1,Grid_HelpList.Row]) as TAdvTabSheet);

Aber das kann ich nicht compilieren, denn ich bekomme den Fehler ausgewiesen:
[DCC Fehler] FrameHelpTablesUnit.pas(53): E2015 Operator ist auf diesen Operandentyp nicht anwendbar

Ich bin mir auch nicht sicher, ob das TabSheet unter dem Objekt PageControl gefunden wird.

Kann mir jemand einen Tip geben?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
ManBu

Registriert seit: 4. Mär 2008
9 Beiträge
 
#2

AW: FindComponent in einem Frame

  Alt 28. Jan 2014, 11:24
Hi,

kann es sein dass du falsch geklammert hast?

Wenn du das so in deinem Code hast versucht du aus einem String ein TAdvTabSheet zu machen.

Page_HelpList.ActivePage:=Page_HelpList.FindComponent('TabSheet_'+Grid_HelpList.Cells[1,Grid_HelpList.Row]) as TAdvTabSheet; Zudem musst du auch an der richtigen Stelle suchen, d.h. im Frame.

Das Ganze müsste dann also komplett so lauten:

Page_HelpList.ActivePage:=Frame.FindComponent('TabSheet_'+Grid_HelpList.Cells[1,Grid_HelpList.Row]) as TAdvTabSheet;

Geändert von ManBu (28. Jan 2014 um 11:34 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: FindComponent in einem Frame

  Alt 28. Jan 2014, 11:57
Hallo,

Das ist der Aufbau meines Frames:

Delphi-Quellcode:
unit FrameHelpTablesUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AdvPageControl, ComCtrls, Grids, AdvObj, BaseGrid, AdvGrid, ExtCtrls,
  TGridDesignUnit, StdCtrls, AdvEdit;

type
  TFrame_HilfsTabellen = class(TFrame)
    Panel_Left: TPanel;
    Grid_HelpList: TAdvStringGrid;
    Page_HelpList: TAdvPageControl;
    TabSheet_Abteilungen: TAdvTabSheet;
    TabSheet_Adresse: TAdvTabSheet;
    TabSheet_Branche: TAdvTabSheet;
    TabSheet_Gruppe: TAdvTabSheet;
    TabSheet_Sprache: TAdvTabSheet;
    TabSheet_Status: TAdvTabSheet;
    TabSheet_Unternehmen: TAdvTabSheet;
    Panel_Abteilungen_Titel: TPanel;
    Panel_Adresse_Titel: TPanel;
    Panel_Branche_Titel: TPanel;
    Panel_Gruppe_Titel: TPanel;
    Panel_Sprache_Titel: TPanel;
    Panel_Status_Titel: TPanel;
    Panel_Unternehmen_Titel: TPanel;
    Panel_Abteilung_GridTitel: TPanel;
    AdvStringGrid1: TAdvStringGrid;
    Panel1: TPanel;
    AdvEdit1: TAdvEdit;
    procedure FrameResize(Sender: TObject);
    procedure Grid_HelpListClickCell(Sender: TObject; ARow, ACol: Integer);
    procedure Grid_HelpListSelectionChanged(Sender: TObject; ALeft, ATop,
      ARight, ABottom: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

implementation

Das ist der Procedureaufruf
Delphi-Quellcode:
procedure TFrame_HilfsTabellen.Grid_HelpListSelectionChanged(Sender: TObject;
  ALeft, ATop, ARight, ABottom: Integer);
begin
   Page_HelpList.ActivePage:=Frame_Hilfstabellen.FindComponent('TabSheet_'+Grid_HelpList.Cells[1,Grid_HelpList.Row]) as TAdvTabSheet;
end;
Aber er erkennt Frame_Hilfstabellen nicht. Ich bekomme die Fehlermeldung:"Formular "Frame_Hilfstabellen" referenziert Formular Frame_Hilfstabellen das in der Unit FrameHelpTablesUnit deklariert ist, aber nicht in Ihrer Uses-List steht. Möchten Sie es hinzufügen?"

Wenn ich dann ja sage, fügt er es in der Uses-Liste hinzu und gibt mir dann den Fehler:
[DCC Fataler Fehler] FrameHelpTablesUnit.pas(47): F2092 Das Programm oder die Unit 'FrameHelpTablesUnit' ruft sich selbst wieder auf Was ja auch logisch ist.

Kann mir jemand sagen, warum das bei einem Frame so schwierig ist?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: FindComponent in einem Frame

  Alt 28. Jan 2014, 12:00
Du bist doch in einer Methode des Frames. Müsste daher
Page_HelpList.ActivePage := FindComponent('TabSheet_'+Grid_HelpList.Cells[1,Grid_HelpList.Row]) as TAdvTabSheet; nicht genügen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: FindComponent in einem Frame

  Alt 28. Jan 2014, 12:11
Ja, reicht...

Vielen Dank
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: FindComponent in einem Frame

  Alt 28. Jan 2014, 12:22
Du bist doch in einer Methode des Frames. Müsste daher
Page_HelpList.ActivePage := FindComponent('TabSheet_'+Grid_HelpList.Cells[1,Grid_HelpList.Row]) as TAdvTabSheet; nicht genügen?
Nicht nur nicht genügen, sondern wo ist denn diese ominöse Variable Frame_Hilfstabellen deklariert?
Wer die findet kriegt ein Bier

Hoffentlich hilft das dabei in der Zukunft eben nicht mehr diese globalen Form-/DataModule-Variablen zu benutzen.

Diese innerhalb der gleichen Klasse zu benutzen ist mMn grob fahrlässig!
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: FindComponent in einem Frame

  Alt 28. Jan 2014, 12:30
Ähm, das verstehe ich nicht. Ich habe ein Frame mit dem Name Frame_HilfsTabellen angelegt und die Unit dieses Frames unter FrameHelpTablesUnit.pas abgespeichert. Warum ist das fahrlassig?

Gruß
Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#8

AW: FindComponent in einem Frame

  Alt 28. Jan 2014, 13:00
Verwende jetzt mal diesen Frame mehrmals und überleg, was dann passiert?

In der Variable steht dann vermutlich immer nur die letzte Instanz und Frame1 würde dann auf Frame2 zugreifen, anstatt auf sich selber.
Also innerhalb einer Klasseninstanz niemals über eine externe Variable gehen.

Es ist schon vorgekommen, daß jemand "ausversehn" die MainForm vom Delphi hatte doppelt erstellen lassen
und wunderte sich dann, daß über Form1.Edit1.Text irgendwie nicht das ausgelesen werden konnte, was man in das Edit reinschrieb.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (28. Jan 2014 um 13:02 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: FindComponent in einem Frame

  Alt 28. Jan 2014, 18:15
Ok, dieses Thema würde ich gerne in einem anderen Thread vertiefen. Mich interessiert nämlich brennend, wie ich Daten von Unit zu Unit übergebe, ohne sie untereinander einzubinden.

In diesem Falle habe ich mir (nach meinem Verständnis) nix zu Schulden kommen lassen. Die Variable Frame_Hilfstabellen gibt es nämlich garnicht - es haette TFrame_Hilfstabellen heißen müssen, was er aber nicht gefunden hatte. Und weil ich dem Frame den Name Frame_Hilfstabelle gegeb hatte, habe ich es damit versucht, was er aber auch nicht gefunden hat.

Sorry

Gruß und vielen Dank an alle!

Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#10

AW: FindComponent in einem Frame

  Alt 28. Jan 2014, 18:34
Mich interessiert nämlich brennend, wie ich Daten von Unit zu Unit übergebe, ohne sie untereinander einzubinden.
Ohne geht einfach nicht.

Wenn du auf etwas einer anderen Unit zugreifen willst, dann mußt du zwangsweise die andere Unit einbinden.

Oder eine weitere Unit, wo die gewünschte Funktion durchgeschleift wurde.
Wobei die andere Unit in der Weiteren eingebunden ist usw., also es bleibt bei der Abhängigkeit.

Sollen beide Units keine direkte Abhängigkeit besitzen, dann muß das gemeinsame in eine weitere gemeinsam genutzte Unit rein, welche in Beiden units eingebunden wird.



Alternativ kann man maximal noch Methoden der IPC prozessintern nutzen.
> Ports, Named-Pipes, Named-MMFs, Register-Messages an "definierte" Fenster usw.
FastMM macht das im Shared-Mode z.B. so, wo sich die erste Instantz im Prozess namentlich erkenntlich macht und die nächsten Instanzen, leiten dann auf Diese um.
Und die VCL nutzt ein ATOM an den Fenstern, für seine Verlinkung zwischen TWinControl und HWND.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (28. Jan 2014 um 18:38 Uhr)
  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 11:32 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