Hallo,
kann mir jemand sagen, wie ich aus einer laufenden Anwendung heraus auf die Fenster der IDE zugreifen kann? Ich bräuchte eigentich nur den Handle, dann kann ich schon über GetControl(Handle) ( - oder so ähnlich - ) auf die TControl zugreifen.
Konkret geht es mir darum, das Nachrichtenfenster, das unter den unteren Bildschirmrand gerutscht ist (also mit Screen nicht mehr erreichbar), wieder nach oben in den sichtbaren Bereich zu holen.
Weiß jemand eine Hilfe?
Herzlichen Dank!
wie auf Lazarus-Fenster zugreifen (Handle)?
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: wie auf Lazarus-Fenster zugreifen (Handle)?
Dazu brauchst du kein extra Programm: Im Lazarus-Konfigurations-Verzeichnis (unter Windows 7: C:\Users\<username>\AppData\local\lazarus\) findest du die Datei environmentoptions.xml, in der die Dialogpositionen gespeichert sind. Entweder du löschst die ganze Datei (ACHTUNG: ein Großteil deiner Lazarus-Einstellungen ist weg) oder du sucht die Position für das Nachrichtenfenster und änderst/löschst diese. Bei mir sieht das so aus:br_klaus hat geschrieben:Konkret geht es mir darum, das Nachrichtenfenster, das unter den unteren Bildschirmrand gerutscht ist (also mit Screen nicht mehr erreichbar), wieder nach oben in den sichtbaren Bereich zu holen.
Code: Alles auswählen
<MessagesView>
<WindowPlacement Value="RestoreWindowGeometry"/>
<CustomPosition Left="277" Top="659" Width="398" Height="274"/>
<WindowState Value="Normal"/>
<Caption Value="Nachrichten"/>
</MessagesView>
Falls du das immer noch tun willst: Schreib dir ein Package; das installierst du und hast dann über Forms.Application.Forms zugriff auf alle Formulare der IDE (so die Theorie).br_klaus hat geschrieben:kann mir jemand sagen, wie ich aus einer laufenden Anwendung heraus auf die Fenster der IDE zugreifen kann? Ich bräuchte eigentich nur den Handle, dann kann ich schon über GetControl(Handle) ( - oder so ähnlich - ) auf die TControl zugreifen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: wie auf Lazarus-Fenster zugreifen (Handle)?
Geht auch in der IDE, ohne Gefummel und für jedes IDE-Fenster:
Re: wie auf Lazarus-Fenster zugreifen (Handle)?
Für das Nachrichtenfenster benütze ich allerdings den Manual Docker seit Jahren. Völlig Problemlos.
http://wiki.freepascal.org/Manual_Docker" onclick="window.open(this.href);return false;
http://wiki.freepascal.org/Manual_Docker" onclick="window.open(this.href);return false;
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
Re: wie auf Lazarus-Fenster zugreifen (Handle)?
theo hat geschrieben:Geht auch in der IDE, ohne Gefummel und für jedes IDE-Fenster:
Theoretisch müßte das auch bei mir gehen. Nur leider habe ich das Problem, daß CodeTYphon bei der Installation der Big IDE (eine reiche Auswahl an bereits vorinstallierten Packages), diese Optionen (Fenstergröße einstellen) gelöscht hat. Das muß wohl ein Bug bei denen sein, denich vielleicht noch finden werde...
Habe aber eine Möglichkeit gefunden, das Problem in Lazarus selber zu lösen, und zwar in der Unit Main in der Procedure
Code: Alles auswählen
procedure TMainIDE.OnGetLayout(Sender: TObject; aFormName: string; out
aBounds: TRect; out DockSibling: string; out DockAlign: TAlign);
Code: Alles auswählen
if (aFormName=NonModalIDEWindowNames[nmiwMessagesViewName]) then begin // lädt das Nachrichtenfenster (MessagesView)
// place messages below source editor
ScreenR:=IDEWindowCreators.GetScreenrectForDefaults;
if SourceEditorManager.SourceWindowCount>0 then begin
SrcEditWnd:=SourceEditorManager.SourceWindows[0];
aBounds:=GetParentForm(SrcEditWnd).BoundsRect;
aBounds.Top:=aBounds.Bottom+25;
aBounds.Bottom:=aBounds.Top+100;
end else begin
aBounds:=Rect(ScreenR.Left+250,ScreenR.Bottom-200,ScreenR.Right-250,100); // top = ScreenR.bottom-200, bottom = 100???
// Rect(ScreenR.Left+250,ScreenR.Bottom-200,ScreenR.Right-250,ScreenR.Bottom-100); nicht besser ?
end;
if IDEDockMaster<>nil then begin
DockSibling:=NonModalIDEWindowNames[nmiwSourceNoteBookName];
DockAlign:=alBottom;
end;
end;
Um zu verhindern, daß das Fenster beim Laden unterhalb des ScreenBereichs bleibt, füge ich einfach am Ende hinzu:
Code: Alles auswählen
if abounds.top > ScreenR.bottom-100 then abounds.top := ScreenR.bottom-100
Code: Alles auswählen
if (aFormName=NonModalIDEWindowNames[nmiwMessagesViewName]) then begin // lädt das Nachrichtenfenster (MessagesView)
// place messages below source editor
ScreenR:=IDEWindowCreators.GetScreenrectForDefaults;
if SourceEditorManager.SourceWindowCount>0 then begin
SrcEditWnd:=SourceEditorManager.SourceWindows[0];
aBounds:=GetParentForm(SrcEditWnd).BoundsRect;
aBounds.Top:=aBounds.Bottom+25;
// aBounds.Bottom:=aBounds.Top+100; --> kann wegfallen, wird noch einmal angegeben
end else begin
Rect(ScreenR.Left+250,ScreenR.Bottom-200,ScreenR.Right-250,ScreenR.Bottom-100);
end;
if IDEDockMaster<>nil then begin
DockSibling:=NonModalIDEWindowNames[nmiwSourceNoteBookName];
DockAlign:=alBottom;
end;
if abounds.top > ScreenR.bottom-100 then abounds.top := ScreenR.bottom-100;
abounds.bottom := abounds.top+100;
end;