AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Über String auf Komponente zugreife

Ein Thema von Sugar · begonnen am 27. Jan 2016 · letzter Beitrag vom 28. Jan 2016
Antwort Antwort
Sugar

Registriert seit: 23. Jul 2012
83 Beiträge
 
#1

Über String auf Komponente zugreife

  Alt 27. Jan 2016, 16:48
Delphi-Version: 7
Hallo Forum,

ich habe zwar einige Threads zu meinem Thema gefunden, aber keinen konnte ich nutzen wie ich es benötige bzw. mir gedacht habe.

Zum Problem: Ich habe ein Datengrid und möche dem Benutzer überlassen welche Felder er einblendet. Dazu habe ich eine einfache Tabellenansich gebaut, in der er ein boolsches Feld über eine Checkbox verändert. In dem Datensatz steht (im Prinzip) nur der Name der COLUMN und eben der boolsche Wert VISIBLE.

Ich versuche seit einiger Zeit krampfhaft den String aus dem Feld COLUMN irgendwie so zu umzusetzen, dann ich mit in Etwas so agieren kann:

TblColumn.visible = bla bla. Auch meine Versuche mit FindComponent waren nicht erfolgreich. Hat jemand eine Idee wie ich über den Componentennamen in der Tabelle Zugriff auf die Komponente erhalten kann?

Vielen Dank für Tipps und Codeschnipsel

LG
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.027 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Über String auf Komponente zugreife

  Alt 27. Jan 2016, 17:06
Wie befüllst Du den das Grid?
  Mit Zitat antworten Zitat
Sugar

Registriert seit: 23. Jul 2012
83 Beiträge
 
#3

AW: Über String auf Komponente zugreife

  Alt 27. Jan 2016, 17:20
Es ist ein DBGrid und ich zeige Daten aus einer Tabelle ein. Aber das, denke ich, ist nicht das Problem. Ich habe den Komponentenname als String den ich "nur" irgendwie so umwandeln muss, dass ich sagen kann: Komponentenname.visible:= false..
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.701 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: Über String auf Komponente zugreife

  Alt 27. Jan 2016, 17:24
Hat das Grid auch eine Datasource und diese eine Dattenquelle?
Da schon mal geschaut?
Ralph

Geändert von Jumpy (27. Jan 2016 um 17:26 Uhr)
  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
 
#5

AW: Über String auf Komponente zugreife

  Alt 27. Jan 2016, 17:27
Im Prinzip benötigst du für jede Spalte so eine Instanz
Delphi-Quellcode:
TCheckerVM = class abstract
protected
  function GetCaption : string; virtual; abstract;
  function GetChecked : Boolean; virtual; abstract;
  procedure SetChecked( const Value: Boolean ); virtual; abstract;
public
  property Caption: string read GetCaption;
  property Checked: Boolean read GetChecked write SetChecked;
end;
Damit kannst du jetzt eine Checkbox entsprechend befüllen (Caption, Checked).

Um das jetzt konkret für eine DBGrid-Spalte zu haben, bauen wir uns
Delphi-Quellcode:
TDbGridColumnVisibleCheckerVM = class( TCheckerVM )
private
  FColumn: TColumn;
protected
  function GetCaption : string; override;
  function GetChecked : Boolean; override;
  procedure SetChecked( const Value: Boolean ); override;
public
  constructor Create( Column: TColumn );
end;

constructor TDbGridColumnVisibleCheckerVM.Create( Column: TColumn );
begin
  inherited Create;
  FColumn := Column;
end;

function TDbGridColumnVisibleCheckerVM.GetCaption : string;
begin
  Result := FColumn.Title.Caption;
end;

function TDbGridColumnVisibleCheckerVM.GetChecked: Boolean;
begin
  Result := FColumn.Visible;
end;

procedure TDbGridColumnVisibleCheckerVM.SetChecked( const Value: Boolean );
begin
  FColumn.Visible := Value;
end;
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
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Über String auf Komponente zugreife

  Alt 27. Jan 2016, 17:28
Meinst Du sowas?
Delphi-Quellcode:
var
          myKomp : TComponent;
begin
  myKomp := Application.FindComponent(tab1.FieldByName('Komponentenname').AsString);
  if Assigned(myKomp) and (myKomp is TWinControl) then begin
    TWinControl(myKomp).Visible := tab1.FieldByName('Visible').AsBoolean;
  end;
end;
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Über String auf Komponente zugreife

  Alt 28. Jan 2016, 08:07
Ein TDBGrid funktioniert ganz ohne Deklaration der Spalten, aber man kann die anzuzeigenden Spalten explizit definieren (Doppelklick, oder Click auf 'Columns' Eigenschaft): Das Resultat sind einzelne Spaltenkomponenten, die aber auch in der Columnseigenschaft aufgelistet sind. Über diese Eigenschaft iteriert man und schaltet die Sichtbarkeit nach Gusto.

Delphi-Quellcode:
Procedure TMyForm.SetColumnVisibility(dBGrid : TDBGrid; columnName : String; visible : Boolean);
Var
  i : Integer;

Begin
  for i:=0 to dbGrid.Columns.Count-1 do
    if dbGrid.Columns[i].FieldName=columnName then begin
      dbGrid.Columns[i].Visible := visible;
      Exit;
    end;

  Raise Exception.CreateFmt('Grid enthält keine Spalte mit Namen: %s',columnName);
End;
Du sprichst von 'Komponentennamen', aber ich denke, Du meinst Feld/Spaltenname der Tabelle, oder?

Geändert von Dejan Vu (28. Jan 2016 um 08:14 Uhr)
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
577 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Über String auf Komponente zugreife

  Alt 28. Jan 2016, 11:28
Hast du es schon mal über das entsprechende Feld der Datenquelle versucht:

DBGrid.DataSource.DataSet.FieldByName(Fieldname).Visible :=false;
  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
 
#9

AW: Über String auf Komponente zugreife

  Alt 28. Jan 2016, 12:20
Hast du es schon mal über das entsprechende Feld der Datenquelle versucht:

DBGrid.DataSource.DataSet.FieldByName(Fieldname).Visible :=false;
Das ist nicht immer das, was man will.

Setzt man das beim Feld selber, dann wird die Spalte erzeugt oder wieder entfernt.

In der Regel geht man ja her und setzt bei den Feldern mit ID-Werten das Visible auf false . Dafür werden jetzt auch keine Spalten im Grid erzeugt.

Wenn ich dem Benutzer jetzt anbieten möchte Spalten ein- oder auszublenden, dann will ich aber nicht, dass er diese ID-Werte wieder einblenden kann. Und das schaltet man bei der Spalte selber ein.

Im Übrigen ist die Spalte in einem DBGrid keine Komponente -> Delphi-Referenz durchsuchenVcl.DbGrids.TColumn.
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
Sugar

Registriert seit: 23. Jul 2012
83 Beiträge
 
#10

AW: Über String auf Komponente zugreife

  Alt 28. Jan 2016, 15:51
Vielen DAnk für die Tipps,

die Herangehensweise von Dejan Vu hat mich zur Lösung gebracht.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf