Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriff auf Frame-Objekte (https://www.delphipraxis.net/168343-zugriff-auf-frame-objekte.html)

Dennis07 20. Mai 2012 17:22

AW: Zugriff auf Frame-Objekte
 
Zitat:

Zitat von Furtbichler (Beitrag 1167330)
Man Dennis, das ist so banal. Zeig einfach den Code, dann sieht man es sofort.
Delphi-Quellcode:
Type
  TMyFrame = Clas (TFrame)
  ...
  public
    Procedure ChangeLanguage();
  ...
  end;

Das habe ich auch schon probiert, es funktioniert nicht, und das aus 3 Gründen.
  1. Wenn ich die Methode "Public" mache, muss ich alle der Objekte aktualisieren, das wäre aber nur eine Frage des Auswand, würde ich sogar in Kauf nehmen
  2. Nachdem ich die Objektnamen geändert habe (also von "Button1" auf "MyFrame.Button1") und das ganze kompiliere, kommt die Frage, ob ich uMyFrame in uMyFrame einbinden will, was ja sowieso schon mal blödsinn ist. Wenn ich auf "Ja" klicke und neu starte, kommt die fehlermeldung, dass ich eine Unit nicht in sich selber einbinden könne (was ja auch logisch ist)
  3. Naja, ein drittes Problem wäre, dass ich insgesamt 5 Frames habe, und jedes eine "ChangeLanguage"-Prozedur hat. Diese will ich von der Haupt-Unit nacheinander brav aufrufen, deshalb die dekleration innerhalb des Frames

Hier der Header meiner Haupt-Unit:
Delphi-Quellcode:
unit uUpdater;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ExtCtrls, ThemeMgr, IniFiles,
  uWelcome, uLicense, uProgress, uFinish;

type
  TfmUpdater = class(TForm)
    pnSettings: TPanel;
    coLanguage: TComboBox;
    laLanguage: TLabel;
    pnButtons: TPanel;
    btCancel: TButton;
    btInstall: TButton;
    laCopyright: TLabel;
    ThemeManager1: TThemeManager;
    procedure Step(StepID: Integer);
    procedure ChangeLanguage;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure coLanguageChange(Sender: TObject);
  private
    { Private-Deklarationen }
    Frame_Welcome: TFrame;
    Frame_License: TFrame;
    Frame_Progress: TFrame;
    Frame_Finish: TFrame;

    LangIsGer: Boolean;
    CurrentStep: Integer;
  public
    { Public-Deklarationen }
    Next: String;
    Install: String;
    Finish: String;

    Msg_Cancel: String;
  end;
Hier der Header einer meiner Frame-Units:
Delphi-Quellcode:
unit uLicense;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;

type
  TfrLicense = class(TFrame)
    laHeader: TLabel;
    reLicense: TRichEdit;
    rbAgree: TRadioButton;
    rbDecline: TRadioButton;
    procedure ChangeLanguage(Ger: Boolean);
    procedure rbAgreeClick(Sender: TObject);
    procedure rbDeclineClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

implementation

uses uUpdater;

daywalker9 20. Mai 2012 17:30

AW: Zugriff auf Frame-Objekte
 
Das klappt natürlich nicht weil du deine Variablen alle als TFrame deklariert hast.


Ändere einfach deine Deklaration von TFrame auf TWelcomeFrame (oder was auch immer)

Dalai 20. Mai 2012 17:46

AW: Zugriff auf Frame-Objekte
 
Ich frage mich ernsthaft, warum du das Rad neu erfinden musst...

MfG Dalai

himitsu 20. Mai 2012 18:15

AW: Zugriff auf Frame-Objekte
 
Schön, daß das nun endlich mal geklärt ist. (hat auch lange genug gedauert)
Denn genau deswegen hatte ich danach gefragt.

Zitat:

Delphi-Quellcode:
    Frame_Welcome: TFrame;
    Frame_License: TFrame;
    Frame_Progress: TFrame;
    Frame_Finish: TFrame;

Woher soll eine TFrame-Variable auch die Komponenten/Felder kennen, welche z.B. erst in TfrLicense deklariert wurden?

Dennis07 20. Mai 2012 18:42

AW: Zugriff auf Frame-Objekte
 
Müsste es nicht reichen, den Befehl
Delphi-Quellcode:
Frame_123 := TMyFrame.Create
zu geben??

daywalker9 20. Mai 2012 19:02

AW: Zugriff auf Frame-Objekte
 
Zitat:

Zitat von Dennis07 (Beitrag 1167356)
Müsste es nicht reichen, den Befehl
Delphi-Quellcode:
Frame_123 := TMyFrame.Create
zu geben??

Nein, TFrame weiß nichts von deiner Funktion ChangeLanguage in TfrLicence (da Du ja von TFrame ableitest). Ändere einfach TFrame auf TfrLicence ab und kompiliere.

stahli 20. Mai 2012 20:02

AW: Zugriff auf Frame-Objekte
 
Nur noch ergänzend:

Frame_123 ist ein Zeiger auf eine Speicherstelle. Der Compiler interpretiert diese als TFrame da Du das so angegeben hast.
Willst Du das Objekt in anderer Form nutzen, musst Du casten:

Delphi-Quellcode:
Frame_123: TFrame;
...
Frame_123 := TMyFrame.Create;
...
if Frame_123 is TMyFrame then
  (Frame_123 as TMyFrame).DoSpezial;
Das ist natürlich etwas umständlich und sollte vermieden werden.

Dennis07 21. Mai 2012 08:11

AW: Zugriff auf Frame-Objekte
 
Hi Leute,
Danke für eure Hilfe, jetzt funktioniert alles.
mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Seite 3 von 3     123   

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