AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi zur laufzeit erstelltes control wird nur teilweise zerstört
Thema durchsuchen
Ansicht
Themen-Optionen

zur laufzeit erstelltes control wird nur teilweise zerstört

Ein Thema von kiar · begonnen am 5. Mär 2004 · letzter Beitrag vom 28. Mär 2004
Antwort Antwort
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#1

zur laufzeit erstelltes control wird nur teilweise zerstört

  Alt 5. Mär 2004, 21:45
hallo

zur Laufzeit erstelle ich ein panel, zwei edit's und einen bitbtn

mit folgenden zeilen:
Delphi-Quellcode:
p:= TPanel.Create(self);
      with p do
         begin
           parent:= self;
           p.name:='max';
           height:=100;
           Width :=200;
           Top:= mousePos.x;
           left:= MousePos.y;
           Ctl3D:=false;
           popupmenu:=popupmenu1;
         end;
         for i:=1 to 2 do
           begin
              ed:=TEdit.Create(self);
              ed.parent:=p;
              ed.name:= 'ed' + inttostr(i);
              ed.Height:= 20;
              ed.Width := 70;
              ed.text := '';
              with Tedit(FindComponent('ed'+ inttostr(i))) do
                 begin
                      case i of
                        1: begin
                             top := 10 ;
                             left := 10 ;
                           end;
                        2: begin
                             top := 12 * i+ height;
                             left := 10;
                           end;

                      end;
                 end;
           end;
           btt:=TBitbtn.Create(self);

               btt.Parent:= p.Parent;
               ....
das bedeute ja, das allen den gleichen parent haben, oder?

jetzt möchte ich das Control im OnClick des buttons zerstören. da aber nach löschen kein button mehr da ist, will ich das löschen mit postmessage, an den messageloop anhängen.

ich suche mir das handle des panels und versuche mit WM_Destroy zu löschen -> klappt nicht

dann mit WM_Close -> da verschwindet das panel, aber der button bleibt

warum????????

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#2

Re: zur laufzeit erstelltes control wird nur teilweise zerst

  Alt 7. Mär 2004, 17:04
ich wollte mal hochschieben
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#3

Re: zur laufzeit erstelltes control wird nur teilweise zerst

  Alt 24. Mär 2004, 11:09
noch mal schieben

hier die erstellung des Panels mit allen Controls
Delphi-Quellcode:
procedure TfrmMain.geteilter1Click(Sender: TObject);

var
   p : TPanel;
   ed : TEdit;
   btt: Tbutton;
   MousePos: Tpoint;
   i:integer;
begin
    if XPMenu1.Active then
       XPMenu1.Active:= False;
      
     mousePos:=screentoClient(Mouse.CursorPos);
     p:= TPanel.Create(Stringgrid1);

      with p do
         begin
           parent:= frmmain;
           p.name:='max';
           height:=100;
           Width :=200;
           Top:= mousePos.x;
           left:= MousePos.y;
           Ctl3D:=false;
           popupmenu:=popupmenu1;
         end;
         btt:=TButton.Create(self);

               btt.Parent:= p.parent;
               btt.name:='britta';
               
               btt.Top := p.top + p.Height -30;
               btt.left:= p.Left +10;
               //btt.Kind:=bkOk;
               btt.Visible:=true;
               btt.onClick:=GeteilterDienstInsert;
         for i:=1 to 2 do
           begin
              ed:=TEdit.Create(self);
              ed.parent:=p;
              ed.name:= 'ed' + inttostr(i);
              ed.Height:= 20;
              ed.Width := 70;
              ed.text := '';
              with Tedit(FindComponent('ed'+ inttostr(i))) do
                 begin
                      case i of
                        1: begin
                             top := 10 ;
                             left := 10 ;
                           end;
                        2: begin
                             top := 12 * i+ height;
                             left := 10;
                           end;

                      end;
                 end;
           end;
           

          XPMenu1.Active:= true;
end;
nach der eingabe möchte ich dies wieder löschen und zwar so:
Delphi-Quellcode:
procedure Tfrmmain.GeteilterDienstInsert(Sender : TObject);
var
  hedit,hwd :THandle;
  sErsterDienst,
  sZweiterDienst : String;
  iCnt: integer;
begin
     for icnt :=1 to 2 do
       begin
         with TEdit(FindComponent('ed'+ Inttostr(iCnt))) do
                case iCnt of
                  1: sErsterDienst := text;
                  2: sZweiterDienst := text;
                end;
       end;
       Stringgrid1.Cells[stringgrid1.Col,stringgrid1.row]:=sErsterDienst
                                                           + #13#10 +
                                                           sZweiterDienst;
       hedit:= Findwindow(nil,'Kindergarten');
       hwd:=FindWindowEx(hedit,0,'TPanel','max');
       postmessage(hwd,WM_close,0,0);
       //Showmessage(inttostr(hedit));
end;

der bursche löscht alles, läßt mir aber den button frech auf der form stehen, weitere click's sind möglich.

wm_destroy habe ich auch schon probiert.

hat jemand wenigstens einen ansatz für mich.

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#4

Re: zur laufzeit erstelltes control wird nur teilweise zerst

  Alt 24. Mär 2004, 19:03
mit sendmessage ist es das gleiche. edit's und panel verschwinden ,doch der button hält sich energisch.
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#5

Re: zur laufzeit erstelltes control wird nur teilweise zerst

  Alt 24. Mär 2004, 19:10
Hallo kiar,
ja ich habe noch eine Vorschlag. Sende die Message mit PostMessage nicht an das Panel, sondern an das Formular! Ungefähr wie folgt:
Delphi-Quellcode:
unit Unit1;

interface

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

const
  WM_PRIVATE_FREEPANEL = WM_APP+100;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure WMPRIVATE_FREEPANEL(var Msg : TMessage); message WM_PRIVATE_FREEPANEL;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  PostMessage(Handle,WM_PRIVATE_FREEPANEL,0,0);
end;

procedure TForm1.WMPRIVATE_FREEPANEL(var Msg: TMessage);
begin
  Panel1.Free;
  Panel1:=Nil;
end;

end.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Markus K.

Registriert seit: 26. Jan 2004
Ort: Halle
346 Beiträge
 
Delphi 2005 Personal
 
#6

Re: zur laufzeit erstelltes control wird nur teilweise zerst

  Alt 24. Mär 2004, 19:10
Hallo kiar,
mir ist in deinem Quelltext folgende Zeile aufgefallen.
btt.Parent:= p.parent; Ich glaube, dass du dem Button das Parent des Panels zuweist. Daraus folgt, dass der Button nicht beim löschen des Panels verschwindet, da er nicht auf dem Panel liegt sondern auf dem Parent des Panels. So müsste es richtig sein.
btt.Parent:= p; Tschüß Markus
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#7

Re: zur laufzeit erstelltes control wird nur teilweise zerst

  Alt 24. Mär 2004, 19:12
Hallo Markus,
ich bin mir ziemlich sicher, der Owner für das freigeben verantwortlich ist und nicht der Parent.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#8

Re: zur laufzeit erstelltes control wird nur teilweise zerst

  Alt 28. Mär 2004, 13:44
nach dem ich die oben ausführungen angepasst habe verschwindet das panel vom schirm, existiert aber trotzdem noch.

ein nochmaliger aufruf, sagt, das die komponente schon existiert.

ich kriege das ding einfach nicht kaputt ?

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:01 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