AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Delphi Plugin - Form wird nicht angezeigt
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi Plugin - Form wird nicht angezeigt

Ein Thema von Neutral General · begonnen am 28. Aug 2008 · letzter Beitrag vom 31. Aug 2008
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Delphi Plugin - Form wird nicht angezeigt

  Alt 28. Aug 2008, 12:17
Hi,

Ich schreibe gerade ein kleines Delphi Plugin. Es funktioniert soweit auch ganz gut.
Im Menu der IDE wird ein neues Untermenu erstellt mit dem Namen meines Plugins und darin ist ein MenuItem namens "Anzeigen" (z.B)

Bevor ich mein Package installiere siehts so aus:

Code:
| Datei | Bearbeiten | ... | Hilfe |
dann installiere ich mein Package:

Code:
| Datei | Bearbeiten | ... | Hilfe | Mein Plugin |
                                   | Anzeigen   |
Soweit, so gut. Ich klicke auf das Anzeigen-MenuItem und mein Plugin Formular wird angezeigt

Jetzt schließe ich die IDE und starte sie wieder.

Das Menu:

Code:
| Datei | Bearbeiten | ... | Hilfe | Mein Plugin |
                                   | Anzeigen   |


Ich klicke auf "Anzeigen" und.....nichts.

Habe das ganze schon debuggt. Das OnClick des MenuItems wird ausgeführt. Aber das Formular wird nicht sichtbar.

Hier mal etwas Quelltext (verreinfacht, abstrahiert):
Delphi-Quellcode:
unit Plugin;

interface

uses PluginMenu;

// ...

implementation

procedure InitializePlugin;
begin
  PluginMenu.PluginMenuErstellen;
  // Form: TDockableForm;
  Form := TForm.Create(nil);
end;

procedure FinalizePlugin;
begin
  Form.Free;
end;

initialization
  InitializePlugin;

finalization
  FinalizePlugin;

end.
Delphi-Quellcode:
unit PluginMenu;

interface
  
procedure PluginMenuErstellen;

implementation

procedure PluginMenuErstellen;
var FMainMenu: TMainMenu;
    FPluginMenu,FAnzeigen: TMenuItem;
begin
  FMainMenu := (BorlandIDEServices as INTAServices).MainMenu;
  if FMainMenu = nil then
  begin
    ShowMessage('Kein MainMenu da');
    exit;
  end;

  FPluginMenu := TMenuItem.Create(FMainMenu);
  with FPluginMenu do
    Caption := 'Mein Plugin';
  FMainMenu.Items.Add(FPluginMenu);

  FAnzeigen := TMenuItem.Create(FPluginMenu);
  with FAnzeigen do
  begin
    Caption := 'Anzeigen';
    OnClick := MenuClick;
  end;
  FPluginMenu.Add(FAnzeigen);
end;

procedure TTicketMenu.MenuClick(Sender: TObject);
begin
  Form.ForceShow;
end;

end.
Also wie gesagt. Es funktioniert in der Session in der man das Plugin-Package installiert hat. Wenn man die IDE aber neustartet funktioniert Form.ForceShow (und alle anderen Varianten von Show) nicht. Form <> nil und Form.Left,Form.Top,Form.Width und Form.Height sind auch in Ordnung.



PS: Es handelt sich um eine Delphi 2007 IDE.
PS2: Habe dadurch, dass ich meine Form jetzt Modal anzeigen lasse etwas herausgefunden. Und zwar WIRD das Formular angezeigt, aber es ist unsichtbar

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Delphi Plugin - Form wird nicht angezeigt

  Alt 28. Aug 2008, 12:53
Ich kenne das Problem ganz genau und brauche dringend eine Lösung dafür!

Wenn dein Formular beim IDE-Start noch nicht existieren muss, sondern erst beim Aufruf aus dem Menü, hilft eine simple class procedure, in der du das Formular erstellen kannst. Das funktioniert wunderar. Wenn es allerdings beim bzw nach dem IDE-Start schon existieren soll, da bin ich auch auf der Suche nach einer Lösung
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Delphi Plugin - Form wird nicht angezeigt

  Alt 28. Aug 2008, 13:04
Schön zu wissen, dass es nicht an mir liegt. Andererseits wärs mir vielleicht lieber, wenns an mir läge... Naja.

Das Formular selbst brauche ich noch nicht ganz am Anfang. Aber ich erstelle im Initialization Teil noch andere Klassen, denen ich z.T. eine Instanz meiner TFormklasse übergeben muss, damit sie erfolgreich erzeugt werden können...

<Latein>

Habe mal ein paar kranke Sachen ausprobiert. Habe mir im OnClick des MenuItems mal den Owner meiner Form anzeigen (habs mit GetDC(0) und Windows.TextOut etc aufn Bildschirm gemalt ). Die Owner sind beide male gleich.

Dann habe ich mal folgendes versucht:

Windows.SetParent(Form.Handle,FindWindow('Progman',nil)); weil ich dachte, dass das Fenster vielleicht trotzdem irgendwo ist, wo man es nicht sieht. Mit dem Desktop als Parent würde man es ja sehen.

Vor dem IDE Restart, wo das Fenster angezeigt wird hat man ein IDE-Dockfenster aufm Desktop. Sieht lustig aus

Allerdings hat das auch nichts geholfen.

Habe auch schon

Form.BringToFront; versucht. Nutzt aber auch nichts.

Ein Repaint nach dem Anzeigen nutzt auch nichts

</Latein>



Wenn irgendjemand eine Lösung kennt.. Melfin und ich würden uns freuen
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Delphi Plugin - Form wird nicht angezeigt

  Alt 28. Aug 2008, 13:43
Muss das Formular denn schon vorher existieren? Ansonsten erzeuge es doch dynamisch im OnClick-Event von Anzeigen. Evtl. hilft das.
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#5

Re: Delphi Plugin - Form wird nicht angezeigt

  Alt 28. Aug 2008, 13:47
Zitat von Hador:
Muss das Formular denn schon vorher existieren? Ansonsten erzeuge es doch dynamisch im OnClick-Event von Anzeigen. Evtl. hilft das.
Wie erwähnt, das geht. Aber zumindest bei mir muss es nach dem Start der IDE existieren
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#6

Re: Delphi Plugin - Form wird nicht angezeigt

  Alt 28. Aug 2008, 14:07
Moin, Moin.
Gestern war hier ein Link zu einem PlugIn genannt worden. Da ist auch der Source dabei. Vielleicht hilft's ja weiter ...
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Delphi Plugin - Form wird nicht angezeigt

  Alt 28. Aug 2008, 14:09
Hi,

Habe eine gute und eine schlechte Nachricht:

Das Formular wird bei mir jetzt angezeigt. Dazu musst du folgendes tun:

Delphi-Quellcode:
var old: Cardinal;
begin
  // Entweder
  SetWindowPos(Form.Handle,0,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_SHOWWINDOW)
  Form.ForceShow;
  // Oder (schlechter, aber es funktioniert auch irgendwie)
  Old := GetWindowLong(Form.Handle,GWL_STYLE);
  SetWindowLong(Form.Handle,GWL_STYLE,old or WS_VISIBLE);
  Form.ForceShow;
  Form.BringToFront;
end;
Nachteil: Das Fenster lässt sich nicht schließen. Und nachdem man auf das X geklickt hat geht gar nix mehr. Bzw. die Controls auf der Form sind irgendwie unsichtbar/weg aber die Form selbst lässt sich nicht schließen.

Lösung:

SetWindowPos(Handle,0,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_HIDEWINDOW); ins OnClose der Form schreiben.

Und jetzt will ich nen Keks

Edit: Hab nen Nachteil gefunden:

Das OnShow des Formulars wird nicht ausgeführt. Man sollte/muss es also manuell aufrufen, wenn mans braucht.

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#8

Re: Delphi Plugin - Form wird nicht angezeigt

  Alt 31. Aug 2008, 14:28
Das funktioniert bei mir nach wie vor nicht

Könntest du vielleicht mal deine komplette Vorgehensweise posten
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Delphi Plugin - Form wird nicht angezeigt

  Alt 31. Aug 2008, 15:04
Mh also ich erstelle das formular im Initialization Abschnitt.

Beim Klick auf das MenuItem soll das Formular angezeigt werden. Dazu habe ich folgendes ins OnClick des MIs geschrieben:

Delphi-Quellcode:
SetWindowPos(Form.Handle,0,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_SHOWWINDOW)
Form.ForceShow;
Ansonsten wüsste ich nicht was ich gemacht habe. Ist auch ein Projekt was ich hier zu Hause nicht vorliegen habe.
Kann dir eventuell morgen früh mehr dazu sagen aber ich glaube da gibt es eigentlich nicht viel mehr zu sagen
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#10

Re: Delphi Plugin - Form wird nicht angezeigt

  Alt 31. Aug 2008, 15:23
Vergisses, hab nur was übersehen, funktioniert jetzt prinzipiell bei mir auch, aber:

Bei mir ists ne Dockable Form, bei dir ja auch. Wenn das Fomular angedockt ist, wird es nachwievor nciht angezeigt, falls es gerade nicht sichtbar ist. Das muss aber auf jeden Fall auch irgendwie gehen, ResEd macht das beispielsweise auch.

Irgendwelche Ideen?

Verwendest du eigentlich einen Dockmanager oder kann man sich den sparen?
  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 10:40 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