Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Invalid Class Typecast (https://www.delphipraxis.net/51142-invalid-class-typecast.html)

Wuaegner 6. Aug 2005 21:55


Invalid Class Typecast
 
Delphi-Quellcode:
if ((Sender as TListBox).Items.Count>0) then
Wieso erhalte ich hier diese Fehlermeldung?

Wogegen
Delphi-Quellcode:
(Sender as TListBox).ItemIndex ...
in einer anderen Prozedur klappt?

DGL-luke 6. Aug 2005 22:05

Re: Invalid Class Typecast
 
welche fehlermeldung? :stupid: meine glaskugel ist wohl noch in Hannover, sorry

Wuaegner 6. Aug 2005 22:08

Re: Invalid Class Typecast
 
Die aus meinem Titel, dachte das wäre klar :) .
Nochmal etwas mehr Code:
Delphi-Quellcode:
procedure TForm1.DigitaleRckwrtssuchemiteinbeziehen1Click(Sender: TObject);
var
  KeyInputs: array of TInput;
  KeyInputCount: Integer;
  wnd: HWND;
  s: string;

  procedure KeybdInput(VKey: Byte; Flags: DWORD);
  begin
    Inc(KeyInputCount);
    SetLength(KeyInputs, KeyInputCount);
    KeyInputs[KeyInputCount - 1].Itype := INPUT_KEYBOARD;
    with KeyInputs[KeyInputCount - 1].ki do
    begin
      wVk := VKey;
      wScan := MapVirtualKey(wVk, 0);
      dwFlags := KEYEVENTF_EXTENDEDKEY;
      dwFlags := Flags or dwFlags;
      time := 0;
      dwExtraInfo := 0;
    end;
  end;
begin

  // Markierte Nummer in Zwischenablage
if (Sender as TListBox).Items.Count > 0 then // HIER KOMMT DIE FEHLERMELDUNG
  begin
   s:= (Sender as TListBox).Items.Strings[(Sender as TListBox).ItemIndex];
   // Wenn Nummer nicht mit 0 beginnt setze 07433 davor
   if s[1]<>'0' then
   s:= '07433'+ s;

   ClipBoard.AsText:= s;
  end;

DGL-luke 6. Aug 2005 22:09

Re: Invalid Class Typecast
 
nun, ich glaube "DigitaleRckwrtssuchemiteinbeziehen1" ist weniger eine TStringList als vielmehr z.b. ein TButton, oder? Sender ist immer das steuerelement, das gerade gefeuert hat.

Wuaegner 6. Aug 2005 22:12

Re: Invalid Class Typecast
 
Ja stimmt,
Das ist ein Item aus Popup1, das nun aber von verschiedenen Listboxen aus aufgerufen werden kann. Wie kann ich dann den Sender , also der Listboxen, ins popupClick Ereignis mitgeben, damit der obige Code klappt?

DGL-luke 6. Aug 2005 22:14

Re: Invalid Class Typecast
 
ganz einfach: sender raus, direkt die listbox rein.

Wuaegner 6. Aug 2005 22:15

Re: Invalid Class Typecast
 
Ja nein, die Prozedur soll ja von verschiedenen ListBoxen aus aufgerufen werden und in ihr dann auch die jeweilige ListBox die aufgerufen hat, verarbeitet werden.

DGL-luke 6. Aug 2005 22:24

Re: Invalid Class Typecast
 
oha, dann wirds ein wenig haariger.

mal sehen...

zuerst machst du im private-abschnitt deiner Formdeklaration einen listbox-pointer rein:

Delphi-Quellcode:
type TForm1=class(TForm);
...
private
currentlistbox:TListBox;
dann machst du ein OnContextPopup für deine listboxen:

Delphi-Quellcode:
procedure TGLForm.ListBox1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
begin
currentlistbox:=(sender as TListBox);

handled:=false;
end;
dieses ereignis musst du natürlich allen listboxen zuweisen, die das popup haben.

du kannst dann in deinem menuitem-onclick einfach currentlistbox.items verwenden.

:)

Wuaegner 6. Aug 2005 22:34

Re: Invalid Class Typecast
 
Klappt, vielen Dank :thumb:

Khabarakh 6. Aug 2005 22:35

Re: Invalid Class Typecast
 
Ich bin mir nicht sicher, aber versuch mal das:
Delphi-Quellcode:
CurrentListbox := TListBox(TPopUpMenu(Sender).PopUpComponent);
[edit]Zu spät... aber es ist kürzer :P [/edit]


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