Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Mit TButton über FindComponent auf Objekt in anderer Unit zugreifen (https://www.delphipraxis.net/189587-mit-tbutton-ueber-findcomponent-auf-objekt-anderer-unit-zugreifen.html)

majornudelholz 27. Jun 2016 21:33

Mit TButton über FindComponent auf Objekt in anderer Unit zugreifen
 
Hallo!

Ich habe mal wieder ein Problem... und zwar weiß ich nicht, wie ich auf ein Object(TButton) mittels FindComponent aus einer anderen Unit zugreifen kann.
Hier eine Idee von mir, die soweit keine Fehlermeldungen liefert, bis auf das Delphi TButton nicht erkennt, doch weiß ich nicht, wie ich dieses Problem lösen soll.

USpiel (Unit2) Kopf:
Delphi-Quellcode:
unit USpiel;

interface

uses Vcl.Dialogs, Classes, SysUtils, Forms;

type TLevel = 1..16;
type TZufallszahlen = 1..4;
type TSpiel = class(TComponent)
  private
    byLevel : TLevel;
    byFragenNr : Integer;
  public
    constructor Create;
    destructor Destroy;
    procedure FragenHolen(Level:Integer; Form: TForm);
    procedure IncLevel;
    procedure Optisch(Ereignis: Integer);
    function LevelHolen() : Integer;
    function AntwortRichtig(BAntwort: string) : Boolean;
end;
Prozedur in USpiel (Unit2):
Delphi-Quellcode:
procedure TSpiel.FragenHolen(Level:Integer; Form :TForm);
  var FragenAnzahl, LineAnzahl, FragenLine, LineNr, I, c : Integer;
      MngZufallszahlen : Set of TZufallszahlen;
      Zufallszahl : TZufallszahlen;
      sl : TStringList;
  begin
    [ ...... ] //ausgelassen
            c := 0;
            while (c < 5) do
              begin
                Zufallszahl := Random(4)+1;
                if not (Zufallszahl in MngZufallszahlen) then
                  begin
                    MngZufallszahlen := MngZufallszahlen + [Zufallszahl];
                    inc(c);
                    TButton(Form.FindComponent('AntwortButton'+ IntToStr(c))) := sl[Fragenline + Zufallszahl];
                  end
              end;
          finally
            sl.free;
          end;
      end
  else
    Optisch(2);
  end;

Mein Problem liegt hier:

Delphi-Quellcode:
TButton(Form.FindComponent('AntwortButton'+ IntToStr(c))) := sl[Fragenline + Zufallszahl];
Meine Frage ist also: Wie schaffe ich es, dass TButton erkannt wird? Wenn ich UHaupt(Unit1) in die Uses schreibe, treten Probleme mit der Erkennung von Methoden aus Unit2 (USpiel) auf...
Hat einer eine Idee? Bin für jeden Gedankenanstoß dankbar :)

MfG
MajorNudelholz

Luckie 27. Jun 2016 23:02

AW: Mit TButton über FindComponent auf Objekt in anderer Unit zugreifen
 
Delphi-Quellcode:
TButton(Form.FindComponent('AntwortButton'+ IntToStr(c))) := sl[Fragenline + Zufallszahl];
Was soll das überhaupt werden? Du weißt einem Objekt, der Schaltfläche in diesem Fall, ein Item aus einer StringListe zu?

Erklär mal, was du eigentlich machen willst.

majornudelholz 28. Jun 2016 07:22

AW: Mit TButton über FindComponent auf Objekt in anderer Unit zugreifen
 
Achso, ja oke, mir fällt Grade auf, dass ich im Laufe des Probierens das ".Caption" vergessen habe. Das hat aber trotzdem nicht funktioniert.

Zu dem, was ich machen will:
Ich möchte WWM programmieren. Dabei soll den die Fragen aus einer .txt ausgelesen. Es gibt für jedes Level eine eigene .txt, mit anderen Fragen und Antworten natürlich. Je in FragenBlock steht in 5 Zeilen untereinander. Ich möchte natürlixh, dass sich die Antwortmöglichkeiten auf den Button (über Caption) immer zufällig verändern. Mein Problem, dass ich derzeit habe ist, dass ich es nichttp hinkriege, diese Antwortmöglichkeit dem Caption des Buttons in der anderen Unit zu überführen. Es funktioniert wirklich alles bisher nur eben TButton wird mir als undeklarierter Bezeichner angegeben. Hat einer eine Idee? Ggf. Stelle ich auch nochmal beide Units hoch, falls das hilft?


Delphi-Quellcode:
TButton (Form.FindComponent('AntwortButton'+ IntToStr(c))).Caption := sl[Fragenline + Zufallszahl];

Sherlock 28. Jun 2016 07:55

AW: Mit TButton über FindComponent auf Objekt in anderer Unit zugreifen
 
Mach es Dir doch ein bisschen einfacher: In der Unit, die die Buttons kennt, veröffentlichst du eine Methode, die als Argument die Liste der Antworten annimmt, und dann wiederrum die Buttons so befüllt, wie Du es gerne hättest. Du solltest Dann auch nicht unbedingt mit FindComponent hantieren müssen, Du kennst ja die Buttons schließlich.

Sherlock

Luckie 28. Jun 2016 09:09

AW: Mit TButton über FindComponent auf Objekt in anderer Unit zugreifen
 
Zitat:

Zitat von majornudelholz (Beitrag 1341312)
nur eben TButton wird mir als undeklarierter Bezeichner angegeben.

Vielleicht mal in die Hilfe gucke, in welcher Unit die Komponente enthalten ist?

majornudelholz 28. Jun 2016 18:47

AW: Mit TButton über FindComponent auf Objekt in anderer Unit zugreifen
 
Zitat:

Zitat von Sherlock (Beitrag 1341318)
Mach es Dir doch ein bisschen einfacher: In der Unit, die die Buttons kennt, veröffentlichst du eine Methode, die als Argument die Liste der Antworten annimmt, und dann wiederrum die Buttons so befüllt, wie Du es gerne hättest. Du solltest Dann auch nicht unbedingt mit FindComponent hantieren müssen, Du kennst ja die Buttons schließlich.

Sherlock

Das ist auch eine Idee, doch weiß ich nicht, wie ich diese Methode dann in meiner 2. Unit aufrufen soll, da sonst Unit1 Unit2 aufruft und umgekehrt...

majornudelholz 28. Jun 2016 18:47

AW: Mit TButton über FindComponent auf Objekt in anderer Unit zugreifen
 
Zitat:

Zitat von Luckie (Beitrag 1341323)
Zitat:

Zitat von majornudelholz (Beitrag 1341312)
nur eben TButton wird mir als undeklarierter Bezeichner angegeben.

Vielleicht mal in die Hilfe gucke, in welcher Unit die Komponente enthalten ist?

Wo soll ich da gucken, ich finde nichts :(

Sir Rufo 28. Jun 2016 20:39

AW: Mit TButton über FindComponent auf Objekt in anderer Unit zugreifen
 
Zitat:

Zitat von majornudelholz (Beitrag 1341437)
Zitat:

Zitat von Luckie (Beitrag 1341323)
Zitat:

Zitat von majornudelholz (Beitrag 1341312)
nur eben TButton wird mir als undeklarierter Bezeichner angegeben.

Vielleicht mal in die Hilfe gucke, in welcher Unit die Komponente enthalten ist?

Wo soll ich da gucken, ich finde nichts :(

Online-Hilfe -> da -> Delphi-Referenz durchsuchenVcl.StdCtrls.TButton <- nein, zu weit :stupid:

Luckie 28. Jun 2016 20:46

AW: Mit TButton über FindComponent auf Objekt in anderer Unit zugreifen
 
Cursor auf TButton und dann F1? :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:38 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