AGB  ·  Datenschutz  ·  Impressum  







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

Frame aus eigener Prozedur aufrufen

Ein Thema von pmros · begonnen am 8. Sep 2015 · letzter Beitrag vom 9. Sep 2015
Antwort Antwort
Seite 2 von 3     12 3      
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#11

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 21:30
Zitat:
Bei der Übergabe von TFrame an die Prozedure sind innerhalb der Prozedure nur die Attribute bekannte, über die TFrame verfügt. Wenn FrameH von TFrame abgeleitet ist und dazu zusätzlich ein Edit bekommen hat, so ist dieses in der Prozedure nicht bekannt, dann muss die Prozedur geändert werden, funktioniert aber nicht mehr mit beliebigen Frames, sondern nur noch mit Frames vom Typ TFrameH und den davon abgeleiteten Varianten.
Mit TFrameH funktioniert es, danke. Aber wenn es dann nicht mehr mit beliebigen Frames funktioniert, ist das ein weiterer Grund für mich, keinen Frame Namen an die Prozedur zu übergeben, sondern erst in der Prozedur über die Variabel den jeweiligen Frame zu wählen - falls das überhaupt möglich ist.

Geändert von pmros ( 8. Sep 2015 um 21:36 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#12

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 21:39
Sorry, wenn ich es jetzt mal sehr flapsig formuliere:

Du möchtest in der Prozedure, abhängig vom Inhalte einer Zeichenfolge, auf einen Frame zugreifen, ohne ihr den Frame bekanntzumachen.

Das kann so erstmal nicht gehen.

Zeig' bitte mal den Quelltext, in dem Du die Prozedure hast und die Frames, sonst stochern wir hier im Dunklen oder reden unnützt aneinander vorbei. Eventuell ist die Lösung ja ganz einfach, wenn man sieht, was Du bisher schon hast.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#13

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 21:45
Du möchtest in der Prozedure, abhängig vom Inhalte einer Zeichenfolge, auf einen Frame zugreifen, ohne ihr den Frame bekanntzumachen.
Ich vermute, das Problem ist, dass versucht wird, auf die automatisch angelegte globale Variable zuzugreifen, die aber nicht sichtbar ist.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#14

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 21:54
Du möchtest in der Prozedure, abhängig vom Inhalte einer Zeichenfolge, auf einen Frame zugreifen, ohne ihr den Frame bekanntzumachen.
Ich vermute, das Problem ist, dass versucht wird, auf die automatisch angelegte globale Variable zuzugreifen, die aber nicht sichtbar ist.
Exakt das ist das Problem.
Nur wie löse ich das, wenn ich den Quelltext dazu nicht kenne.

Eventuell könnte eine Änderung der Prozedure in der Form procedure FormMain.CNCCommandBox(H:String); und ihre Aufnahme in die Private-Deklarationen der Formulars mit procedure CNCCommandBox(H:String); ausreichen. Dann wird sie (vermutlich) auch alle Frames auf dem Formular kennen.

Die Prozedure könnte dann eventuell so aussehen:
Delphi-Quellcode:
procedure FormMain.CNCCommandBox(H:String);
begin
  if (H ='A') then begin
    FrameA.visible:=true;
    FrameA.Left:=1;
    FrameA.Top:=2;
    FrameA.EditX.Text := 'A';
  end else
  if (H ='B') then begin
    FrameB.visible:=false;
    FrameB.Left:=1;
    FrameB.Top:=2;
    FrameB.EditX.Text := '';
  end else
  if (H ='H') then begin
    FrameH.visible:=true;
    FrameH.Left:=192;
    FrameH.Top:=232;
    FrameH.EditX.Text := '';
  end;
  Mit Zitat antworten Zitat
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#15

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 21:56
Ich kürz das mal etwas ab, damit ihr euch nicht durch den Quelltext kämpfen müsst:

Ich habe eine ListBox, die wird spaltenweise mit CNC-Code (für eine CNC-Fräse) befüllt. Das sieht dann in etwa so aus:

Code:
H X=100 Y=100 Z=19 Arbeitsfeld A
Beim Klicken auf diese Zeile wird der Frame aktiviert, der die jeweiligen Eingabefelder beinhalet, um die Werte X, Y, Z und Arbeitsfeld zu ändern. H gibt an, dass es sich um einen Header handelt, der die Plattenmaße auf der Fräse definiert.

Dann käme als nächstes z.B. die Zeile

Code:
G0 X=50 Y=50 Z=10 C=1 T=101
G0 bedeutet dann "Start einer Fräsbahn".

Meine Prozedur soll nun anhand der ausgelesenen ersten Zeichen (H, G0...) die ihr als Variabel übergeben wird, ermitteln welchen Frame sie zeigen soll und mit welchen Werten sie die auf dem befindlichen Frame gelegenen Eingabefeldern füllen soll.

Ich habe Programmcode, der die Zeilen zerlegt und in die Werte aufteilt und der soll ebenfalls in der Prozedur laufen, da anhand des gewählten Frames auch leicht geänderter Code zum Zerlegen laufen soll, da der CNC Code, den ich aus der ListBox auslese, mal mehr und mal weniger Werte hat.
  Mit Zitat antworten Zitat
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#16

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 22:00
Zitat:
Nur wie löse ich das, wenn ich den Quelltext dazu nicht kenne.
Ach dafür hättest du den gebraucht...

Zitat:
Delphi-Quellcode:
procedure FormMain.CNCCommandBox(H:String);
begin
  if (H ='A') then begin
    FrameA.visible:=true;
    FrameA.Left:=1;
    FrameA.Top:=2;
    FrameA.EditX.Text := 'A';
  end else
  if (H ='B') then begin
    FrameB.visible:=false;
    FrameB.Left:=1;
    FrameB.Top:=2;
    FrameB.EditX.Text := '';
  end else
  if (H ='H') then begin
    FrameH.visible:=true;
    FrameH.Left:=192;
    FrameH.Top:=232;
    FrameH.EditX.Text := '';
  end;
Ja, so soll mein Code aussehen! Ich probier das jetzt erst einmal. Danke.
  Mit Zitat antworten Zitat
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#17

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 22:05
nahpets Vorschlag hat funktioniert (sogar ohne Quelltext das Problem gelöst )

allerdings heißt es procedure TFormMain.CNCCommandBox(H:String); Vielen Dank!

Geändert von pmros ( 8. Sep 2015 um 22:12 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
 
#18

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 22:16
Wenn dir dieses if else Schlangenmonster zu unhandlich wird, kannst du ja nochmal nachfragen, denn das geht auch insgesamt eleganter.
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
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#19

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 22:34
OffTopic...

@Sir Rufo:
zeigst du uns mal, wie du es lösen würdest?
Let's fetz sprach der Frosch und sprang in den Mixer
  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
 
#20

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 22:53
Grobes Rezept:
  • Für jeden Arbeitsschritt (H, G0, ...) eine Klasse (ableiten von einer Basisklasse, die wiederum von TPersistent abgeleitet ist)
  • Für jede Klasse die ToString Methode überschreiben (damit geht die Anzeige in der Listbox wie von selbst)
  • Lookup-Tabelle um zu der Datenklasse den passenden Frame zu finden
  • Datenklasse dem Frame per Assign zuweisen
  • Eingaben aus dem Frame der Datenklasse per Assign wieder zuweisen
Delphi-Quellcode:
var
  LFrame: TFrame;
  LData: TPersistent;

LFrame := FrameLookup.GetFrame( LData.ClassType );
LFrame.Assign( LData );
LFrame.Visible := True;

// Eingabedaten aus Frame übernehmen
LData.Assign( LFrame );
Vorteil: Ich brauche bei der Anzeige die konkrete Daten-/Frame-Klasse gar nicht kennen und kann die dadurch einheitlich behandeln.

Neue Daten-/Frame-Klassen lassen sich so einfach hinzufügen.
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)

Geändert von Sir Rufo ( 9. Sep 2015 um 10:37 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 07: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