Nicht anklickbare Form



  • Einfach die Clickhandler des Forms auch vom der Komponente aufrufen lassen?



  • Vielen Dank für die Vorschläge, jedoch hat keiner das erreicht, was mein Ziel ist.

    Nochmal nen Beispiel: Ich lasse einen großen Text auf dem Bildschirm anzeigen und möchte aber z.B. Dateien die im Explorer hinter dem Text dargestellt sind anklicken können, ohne dabei die unsichtbare Form oder das Label anzuklicken.

    Man könnte auch es einfach so sagen: Die Form ist über den ganzen Bildschirm verteilt, unsichtbar aber wie kann ich hindurch klicken?! 🙂



  • Rostfrei[] schrieb:

    Ich weiss nicht genau, ob ich das richtig verstanden habe, aber schau Dir mal TForm::Transparent und TForm::TransparentColor an.

    und was passt da jetzt nicht?!



  • Kann es sein, dass es TForm::Transparent nicht gibt oder irre ich mich??

    Also die Form und das Label sind unsichtbar, ausser der Text vom Label, aber wenn ich etwas anklicken möchte, was hinter der Form ist, klappt das nicht!



  • Stimmt. TForm::Transparent gibt es nicht; mein Fehler. Aber wenn man mal in die Hilfe geschaut hätte, dann hätte man gesehen, das es TForm::TransparentColorValue gibt. Das könnte ja vielleicht auch passen?!

    Konkret:
    Du packst ein Label und ein Panel auf die Form. An beiden wird die Farbe nicht geändert. Die Color-Eigenschaft der Form setzt zu z.B. auf clMaroon.
    Danach TForm::TransparentColorValue ebenfalls auf clMaroon setzen und die Eigenschaft TForm::TransparentColor auf true setzen.
    Das wars schon.
    Bei meinem BCB6 sind diese Eigenschaften alle vorhanden und das ganze läuft ab Windows 2000; aber das weisst Du ja, da Du das ja bereits in der BCB-Hilfe gelesen hast.

    //Edit
    Wenn man dan z.B. in dem Schriftzug 'Label1' in den Kreis des 'a' klickt, dann wird das dahinterliegende Fenster auch korrekt fokussiert.



  • Danke aber genau das alles habe ich doch schon bereits, sonst wäre das Ganze ja nicht unsichtbar!

    Ich möchte jedoch auch hindurch klicken können!
    Denn an den Stellen, wo die Form, bzw das Label unsichtbar auf dem Desktop sind, kann ich die Sachen, die sich hinter denen verbergen (Verknüpfungen, etc.) nicht anklicken, was ich jedoch gerne möchte!

    Hier mal mein Code:

    textForm = new TForm(Form1);
    		textLabel = new TLabel(textForm);
    		textForm->InsertControl(textLabel);
    		Form1->InsertComponent(textForm);
    
    		textLabel->AutoSize = true;
    		textLabel->Font->Name = "Arial";
    		textLabel->Font->Color = clLime;
    		textLabel->Color = (TColor)(clLime + 1);
    		textLabel->Transparent = true;
    		textLabel->Visible = true;
    
    		textForm->FormStyle = fsStayOnTop;
    		textForm->BorderStyle = bsNone;
    		textForm->Color = (TColor)(clLime + 1);
    		textForm->TransparentColorValue = (TColor)(clLime + 1);
    		textForm->TransparentColor = true;
    		textForm->Visible = true;
    


  • Wie bereits geschrieben, kann ich bei mir durch die Form hindurch klicken und Verknüpfungen etc. normal starten.
    BCB Version 6 Enterprise, Windows XP Pro

    //Edit
    Versuch das ganze mal an einem statisch erstelltem (also im Objectinspector) Formular, nicht an einem dynamischen und prüfe mal, ob es dann funktioniert.



  • Vielen Dank für dein Vorschlag!
    Jetzt wo ich die Form nicht mehr dynamisch erstellen lasse, klappt es komischer Weise!



  • Kurze Frage,
    unter welchen Punkt im Objektinspektor stelle ich ein, das die Form statisch erstellt wird? Finde nämlich nichts mit Statisch oder Dynamisch 😞

    Habe Embarcadero RAD Studio 2010.



  • Hallo,

    Das kann man nirgends einstellen. Formen kann man nicht statisch erstellen.
    Das war hier in diesem Thread nur eine ungenaue Ausdrucksweise. Was hier gemeint wurde war ob die Form automatisch am Anfang oder per Hand dann wenn sie gebraucht wird erstellt wird.



  • Aiaiai 😕

    Kann mir das einer nochmal genau erklären, wie genau es s geht, das nur der Text von Label auf den Bildschirm angezeigt wird und man durch diesen Text durch klicken kann?



  • Eles schrieb:

    ...und man durch diesen Text durch klicken kann?

    Darum ging es nicht. Gemeint war der transparente (unsichtbare) Bereich des Labels bzw. des Forms.



  • Ach so, mein Fehler.
    Aber wie kann ich machen, dass man durch den angezeigten Text durch klicken kann?



  • In Kurzform gesagt ermittelst du das Fenster-Handle des darunterliegenden Fensters und leitest das Klick-Event (oder Message) dorthin.

    Wär was fürs Win-Api-Forum.



  • Habe mich in WinAPI mal umgeschaut und nur ein Tip mit WS_EX_LAYERED bekommen. Darauf hin habe ich bei OnCreate

    SetWindowLong(Form1->Handle, GWL_EXSTYLE,GetWindowLong(Form1->Handle, GWL_EXSTYLE) | WS_EX_LAYERED | WS_EX_TRANSPARENT);
    

    eingetragen. Funktioniert aber nur halb, man kann zwar nun durch klicken, allerdings kann man nichts mehr in der Form sehen außer den blanken Rand.

    Wenn ich WS_EX_TRANSPARENT weg lasse sieht man weiterhin nur den Rand und kann nicht durch klicken. Wenn ich WS_EX_LAYERED weg lasse, dann ist alles sichtbar aber man auch nicht durch klicken.

    Einer vielleicht eine Idee wie man es hin bekommt das man alles Sieht aber trotzdem durch klicken kann?



  • Ahh habe es hin bekommen _ 😃 😃 😃

    Habe einfach noch eine Zeile hinzugefügt:

    SetWindowLong(Form1->Handle, GWL_EXSTYLE,GetWindowLong(Form1->Handle, GWL_EXSTYLE) | WS_EX_LAYERED | WS_EX_TRANSPARENT);
     SetWindowLong(Form1->Handle, GWL_HWNDPARENT, 0);
    

Anmelden zum Antworten