Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TWinControl erwartet, TControl vorhanden? (https://www.delphipraxis.net/159180-twincontrol-erwartet-tcontrol-vorhanden.html)

Joerginger 17. Mär 2011 11:13

Delphi-Version: 7

TWinControl erwartet, TControl vorhanden?
 
Besser konnte ich's auf die schnelle nicht betiteln..

Ich schreib' grad einen FormularEditor, der dann an Hand einer Liste diverse Controls auf ein Fenster klatschen soll... Soweit klappt das schon ganz proper, jetzt bin ich wieder an einer Grenze angelangt.

Ich habe ein globales Array von TControl gebastelt,

Code:
var
  arCtl: array of TControl;
mittels meiner Routinen erstelle ich die diversen Controls, zB:

Code:
procedure MSK_Edit(s:string;p:TForm;o:TComponent);

var
  rC:                  rCtl;                       //BESCHREIBUNG DES CONTROLS
  i:                   integer;

begin
  rC:=MSK_Coords(s);                                       //BESCHREIBUNG HOLEN
  i:=MSK_NewIndex;                                          //NEUEN INDEX HOLEN
  arCtl[i]:=TEdit.Create(o);                                //CONTROL ERSTELLEN
  arCtl[i].Parent:=p;                                        //PARENT EINTRAGEN
  arCtl[i].Left:=rC.myL;
  arCtl[i].Top:=rC.myT;
  arCtl[i].Width:=rC.myW;
  arCtl[i].Height:=rC.myH;
  if rC.myCC='N' then (arCtl[i] as TEdit).CharCase:=ecNormal;
  if rC.myCC='U' then (arCtl[i] as TEdit).CharCase:=ecUpperCase;
  if rC.myCC='L' then (arCtl[i] as TEdit).CharCase:=ecLowerCase;
  (arCtl[i] as TEdit).MaxLength:=rC.myML;
  myCtl:=arCtl[i];
  if rc.PC='J' then (arCtl[i-1] as TLabel).FocusControl:=myCtl; <--------------- GENAU HIER KLEMMTS WIEDER MAL...
end;
soll dieser Code ein EditFeld am Form darstellen, tut er auch recht brav. Dann bin ich auf die Idee gekommen, dass ja vor jedem Edit-Feld üblicherweise ein Label ist. In meiner Liste der Beschreibung steht das Label-Feld vor dem Edit Feld. Jetzt sollte beim Label-Feld als .FocusControl das darauf folgende Edit-Feld eingetragen werden können, damit der Anwender mit ALT-Buchstabe auf's Label fokussieren kann (bzw. Versucht) und das Label den Fokus auf das passende Edit-Feld durchreicht... Hoffe es kann mir da noch jemand folgen?

Wenn ich's mit dem Code im obigen Beispiel verwende meint der Compiler frecherweise, dass ich wieder mal Äpfel (TWinControl, welches er erwarten täte) mit Birnen (TControl, welches ich sichtlich übergebe) verwechsle... rc.PC bedeutet ungefähr "Previous Control", wenn da nen "J" drin ist soll das vorig erstellte Control (=Label) eben diesen Eintrag bekommen...

Ich bitte wieder um Ideen/Lösungsansätze...

greetz, Joerginger

DeddyH 17. Mär 2011 11:58

AW: TWinControl erwartet, TControl vorhanden?
 
Delphi-Quellcode:
if (rc.PC='J') and (myCtl is TWinControl) then
  (arCtl[i-1] as TLabel).FocusControl:=TWinControl(myCtl);

Joerginger 17. Mär 2011 12:09

AW: TWinControl erwartet, TControl vorhanden?
 
Ich dank' 1000Mal, bisserl adaptiert, sofort funktioniert...

greetz, Joerginger

himitsu 17. Mär 2011 13:00

AW: TWinControl erwartet, TControl vorhanden?
 
Aber nur wenn du sicher bist, daß aich ein TWnControl darin liegt.
ansonsten so
Delphi-Quellcode:
(arCtl[i-1] as TLabel).FocusControl:=(myCtl as TWinControl);

DeddyH 17. Mär 2011 13:03

AW: TWinControl erwartet, TControl vorhanden?
 
Deswegen frage ich das ja vorher ab, so kommt keine Exception hoch, was bei as AFAIK der Fall ist.


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