Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   TInfoBox - eine InfoBox direkt auf dem Desktop (https://www.delphipraxis.net/74297-tinfobox-eine-infobox-direkt-auf-dem-desktop.html)

3_of_8 1. Aug 2006 01:03


TInfoBox - eine InfoBox direkt auf dem Desktop
 
Liste der Anhänge anzeigen (Anzahl: 2)
Morgen.

Ich stand gerade vor dem Problem: Wie kriege ich eine Reihe von Komponenten auf den Desktop?

Nach und nach kam mir die Idee: Warum nicht die Komponenten in ein Panel packen und das mit der WinAPI bearbeiten.

Und hier ist mein TDesktopPanel.

Es kann in der Entwurfszeit auf einem Formular platziert und mit Komponenten bestückt werden. Zur Laufzeit wandert es dann auf den Desktop und kann mit Left/Top/Width/Height platziert/skaliert werden.

Hinweis: Das TDesktopPanel kann NICHT den Fokus erhalten. Ebensowenig alle Komponenten, die darauf sind. Man kann zwar Edits usw. drauftun, nur reinschreiben geht mangels Fokus nicht. Dafür muss man dann eine Form mit BorderStyle=bsNone verwenden.

Zwei Bugs sind noch drin:
1. Die Form zeichnet bei der Verschiebung des Panels immer noch die Scrollleisten, die einzige Möglichkeit, die da wohl funktioniert ist, bei der Form beide Scrollleisten auf Visisble=False zu stellen. Wenn jemand eine bessere Idee hat, nur her damit.

2. Es gibt ein leichtes Flimmern, wenn die Form in den Vordergrund geholt wird bei WM_MOVE. Wie man das behebt, weiß ich nicht, ich bin aber für Vorschläge offen.

Dax 1. Aug 2006 02:07

Re: TDesktopPanel - ein Panel direkt auf dem Desktop
 
Zu dem ersten Bug: statt des SetParent nimm lieber sowas:
Delphi-Quellcode:
Parent := new TWinControl.CreateParented(GetDesktopWindow);
Windows.SetParent(HAndle, GetDesktopWindow);
Den zweiten kann ich garnicht nachvollziehen :gruebel:

Bleibt trotzdem noch die Frage - für ist sowas gut?

3_of_8 1. Aug 2006 08:38

Re: TDesktopPanel - ein Panel direkt auf dem Desktop
 
new TWinControl.CreateParented? :gruebel:

Und: Ich verwende es zum Beispiel für sowas in der Art wie Hinweisboxen, auf die man aber alles mögliche drauschmeißen kann, also die man frei gestalten kann zur Entwicklungszeit.

EDIT: Ich forme die Kompo mal um zur einer "TInfoBox" und poste sie dann nochmal.

3_of_8 2. Aug 2006 21:39

Re: TDesktopPanel - ein Panel direkt auf dem Desktop
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe es jetzt mal als TInfoBox implementiert. Einfach Show aufrufen, wenn sie gezeigt werden soll.

DP-Maintenance 2. Aug 2006 22:37

DP-Maintenance
 
Dieses Thema wurde von "Chakotay1308" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Open-Source" verschoben.

Meflin 3. Aug 2006 13:48

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Aloa!

Wie wärs mit einem Screenshot, bzw einer Demo-Exe :stupid: ?


Neutral General 3. Aug 2006 14:24

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Die InfoBox-Unit wird nicht klappen wenn du die Trans.pas nicht mitlieferst oder die procedure nicht in die InfoBox.pas reinpackst ;)

EDatabaseError 3. Aug 2006 14:28

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
:stupid: jetzt baut er die Trans.pas in alles ein :lol:

3_of_8 3. Aug 2006 15:13

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Nein.

Der Hint in meinem Periodensystem IST eine TInfoBox. Die war von Anfang an dafür geplant.

Und ich mach das gleich alles, moment.

EDatabaseError 3. Aug 2006 15:15

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
cool. ab welcher version läuft die tinfobox??? D3??? Diese Kompo gefällt mir nämlich ;-)

3_of_8 3. Aug 2006 15:15

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Frag mich nicht, ich kanns nur mit D7 testen. Probiers halt aus.

EDatabaseError 3. Aug 2006 15:19

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
OnLine 85 Kann er Mouse nicht finden und DoubleBuffred im Create hab ich mal ge//

Dann eben noch die Trans ins gleiche verzeichnis also schau mal was sich in line 85 machen lassen kann.

Mfg
Tobi

3_of_8 3. Aug 2006 15:21

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Binde mal Controls ein, dann dürfte das mit Mouse funktionieren.

EDatabaseError 3. Aug 2006 15:26

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
ist schon eingebunden. Kennt mein D3 leider nicht

3_of_8 3. Aug 2006 15:40

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
WinAPI is was tolles... Neue Version im Anhang 1. Beitrag, die dürfte auch bei dir gehen.

(Nur das DoubleBuffered musste noch raustun)

EDatabaseError 3. Aug 2006 15:42

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
im ersten Beitrag ist das Panel aber nicht die infobox???

//Edit schneller als die polizei erlaubt ;-)

EDatabaseError 3. Aug 2006 15:45

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Element " hat kein übergeornetes Fenster.

Wenn ich es in ein Form einfügen will. An wem liegts ;-)

3_of_8 3. Aug 2006 15:47

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
An dir. :stupid:

Spaß beiseite, will be fixed in next release.

EDatabaseError 3. Aug 2006 15:48

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
ok danke

xZise 3. Aug 2006 15:57

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Zitat:

Zitat von EDatabaseError
OnLine 85 Kann er Mouse nicht finden

Siehe dsdt:
Zitat:

Bis einschließlich Delphi 3 steht TMouse nicht zur Verfügung. Hier kann folgender Code verwendet werden.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  P: TPoint;
begin
  GetCursorPos(P);
  Label1.Caption := IntToStr(P.X);
  Label1.Caption := IntToStr(P.Y);
end;

[Quelle]

@ Topic: Das scheint ja eine interssante Kombo zu sein... Ich werds mir mal anguggen.

3_of_8 3. Aug 2006 16:03

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
@xZise: Das habe ich schon geschrieben. ;)

3_of_8 3. Aug 2006 16:09

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
@EDE: Dein Problem ist gefixt.

EDatabaseError 3. Aug 2006 16:15

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
jup es tut! :firejump:

könntest du noch ein Anwendungsbeispiel posten ;-)

3_of_8 3. Aug 2006 16:21

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Ich mach das mal, wenn ich Zeit hab. Wahrscheinlich heute noch.

xZise 3. Aug 2006 16:43

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Zitat:

Zitat von 3_of_8
1. Die Form zeichnet bei der Verschiebung des Panels immer noch die Scrollleisten, die einzige Möglichkeit, die da wohl funktioniert ist, bei der Form beide Scrollleisten auf Visisble=False zu stellen. Wenn jemand eine bessere Idee hat, nur her damit.

Das Panel so resizen, dass es genau auf die Form passt?
Zitat:

Zitat von EDatabaseError
jup es tut! :firejump:

könntest du noch ein Anwendungsbeispiel posten ;-)

Siehe Hydrogenium ein periodensystem

EDatabaseError 3. Aug 2006 16:43

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Mit source ;-)

xZise 3. Aug 2006 16:51

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Zitat:

Zitat von EDatabaseError
Mit source ;-)

Aso :D

3_of_8 3. Aug 2006 17:23

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Zitat:

Zitat von xZise
Zitat:

Zitat von 3_of_8
1. Die Form zeichnet bei der Verschiebung des Panels immer noch die Scrollleisten, die einzige Möglichkeit, die da wohl funktioniert ist, bei der Form beide Scrollleisten auf Visisble=False zu stellen. Wenn jemand eine bessere Idee hat, nur her damit.

Das Panel so resizen, dass es genau auf die Form passt?

Du verstehst das Problem nicht.
Die Form tut einfach so, als ob das Panel ihr immer noch gehören würde und zeichnet bei X/Y-Werten, bei denen X+InfoBox.Width>Form.Width oder Y+InfoBox.Height>Form.Height einfach Scrollleisten.

xZise 3. Aug 2006 18:10

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Genau!
Dann könntest du ja sagen:
Delphi-Quellcode:
if InfoBox.Height + Y > Form.Height then
  InfoBox.Height := Form.Height - Y;
if InfoBox.Width + X > Form.Width then
  InfoBox.Width := Form.Width - X;
Und das meinte ich auch...
Dann hast du das Scrollleisten-Problem gelöst.

3_of_8 3. Aug 2006 18:14

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Das wäre aber nicht der Sinn der Sache.

Dann würde sich nämlich meine InfoBox verformen, was sie ja nicht soll.

EDatabaseError 8. Aug 2006 14:33

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Öhm, hast du jetzt ma die Sourcen wie ich das Ding anwenden kann :gruebel:

Mfg
Tobi

Nils_13 9. Aug 2006 08:26

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Zitat:

Zitat von EDatabaseError
Öhm, hast du jetzt ma die Sourcen wie ich das Ding anwenden kann :gruebel:

Mfg
Tobi

Genau, wir wollen Codes sehen. Oder erklär mal, wie man sie erstellt. Ich habe es mit
Delphi-Quellcode:
bla := InfoBox.Create;
bla.bla2.bla3;
gemacht.

3_of_8 9. Aug 2006 14:05

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Also ich würde es im Formulardesigner auf ne Form ziehen und dann Komponenten draufpacken. Angezeigt wird es dann einfach mit InfoBox.Show;

Allerdings kann mans natürlich auch zur Laufzeit erstellen, wenn man will.

Delphi-Quellcode:
InfoBox:=TInfoBox.Create(nil);
InfoBox.Width:=160;
InfoBox.Height:=100;
lbl:=TLabel.Create(InfoBox);
lbl.Left:=8;
lbl.Top:=8;
lbl.Caption:='Blubb';
InfoBox.Show;

Nils_13 9. Aug 2006 14:27

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Und wie gebe ich die Komponente wieder frei ? Mit oder ohne Freigabe bekomme ich beim Beenden des Programms eine AV.

Meflin 9. Aug 2006 14:45

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Zitat:

Zitat von Nils_13
Und wie gebe ich die Komponente wieder frei ?

wie alles mit Blubb.Free :gruebel:


EDatabaseError 9. Aug 2006 15:33

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Zitat:

Zitat von 3_of_8
Also ich würde es im Formulardesigner auf ne Form ziehen und dann Komponenten draufpacken. Angezeigt wird es dann einfach mit InfoBox.Show;

Allerdings kann mans natürlich auch zur Laufzeit erstellen, wenn man will.

Delphi-Quellcode:
InfoBox:=TInfoBox.Create(nil);
InfoBox.Width:=160;
InfoBox.Height:=100;
lbl:=TLabel.Create(InfoBox);
lbl.Left:=8;
lbl.Top:=8;
lbl.Caption:='Blubb';
InfoBox.Show;


:zwinker: und wie sieht das in einer Anwendung aus??? So wie in deinem Periodensystem als Hint könnte ichs nämlich gebrauchen ;-)

Nils_13 9. Aug 2006 19:12

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Zitat:

Zitat von Meflin
Zitat:

Zitat von Nils_13
Und wie gebe ich die Komponente wieder frei ?

wie alles mit Blubb.Free :gruebel:

AV ist AV.

1. Muss ich die Komponente und die Instanz freigeben
2. Steht hier doch das Problem:
Zitat:

Mit oder ohne Freigabe bekomme ich beim Beenden des Programms eine AV.
Ich brauche die InfoBox außerdem für eine Listbox, von jedem Item sollen Sachen ausgelesen werden. Ein kleines Kurztutorial oder Codebeispiel wäre wirklich hilfreich. Du hast doch einen Webspace, also liegt da nicht das Problem.

3_of_8 9. Aug 2006 19:42

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Also wenn du die Listbox in die Infobox tun willst, dann geht das nicht. Da musst du ne eigene Form nehmen. Denn Fokus in einem Panel ohne Parent - das kann nicht gut gehen.

Nils_13 9. Aug 2006 19:43

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Ich will die Infobox doch nur an der richtigen Stelle mit .Show anzeigen, ohne die Listbox in die Infobox zu packen.

3_of_8 9. Aug 2006 19:49

Re: TInfoBox - eine InfoBox direkt auf dem Desktop
 
Dann gehts.

Sorry, ich dachte irgendwie das ganze wäre selbsterklärend.

Du musst nur Labels auf die InfoBox packen, oder Images usw... Alles was keinen Fokus braucht.

Mit Show zeigst du sie dann an und mit Hide verbirgst du sie wieder.

Sorry, aber wozu ein Beispielprojekt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:33 Uhr.
Seite 1 von 2  1 2      

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