Event OnPaint bei TMemo



  • von 3M gibt es ein Post-It-Programm welches ich aus vielerlei Gründen anders aufgebaut habe. Einordnen von Memos in Kategorien (mehrere Kategorien pro Memo), beliebige Abfragealgorithmen zum umschalten von visible/unvisible über Kategorien und Datum.
    Für mich perönlich echt brauchbar.

    snoopy_kmo



  • Hmm, grundsätzlich muß ich Jansen erst mal zustimmen. Hab zwar keinen Überblick wie Dein Programm aussieht, aber es gibt bestimmt ne andere Lösung. Man darf nur nicht voreilig vor vielleicht etwas mehr Programmieraufwand zurück schrecken 😉



  • Zeigst du denn auch mehrere Memos gleichzeitig, nur teilweise verdeckt an, oder immer nur eines? Denn in letzterem Fall wäre deine Vorgehensweise eine ziemliche Ressourcenverschwendung und ganz schlechter Programmierstil.



  • Es sieht aus wie bei mir auf dem Schreibtisch, alle gleichzeitig übereinander, aber ich kann innerhalb des Haufens kleinere Haufen selektieren (der Rest wird dann unvisible) und damit eine bessere Übersicht gewinnen.

    snoopy_kmo



  • Das hört sich nach Karteikasten an. Allerdings haben die Standard-TabControl bei der Menge IMHO einen großen Nachteil: Man benötigt mehrere Reihen, und immer, wenn man in einer auswählt, gelangt diese Reihe nach unten. Das ist, als würde man bei jedem Suchen den Karteikasten durcheinander feuern. Wirkt auf mich *besoffen*, ich verlier regelmäßig die Orientierung.

    Du könntest zB. BitButton (wegen dem Fokusrahmen) auf ein Panel ablegen. Zu jedem Button gehört ein Memo. Nur eins oder ein Satz ist aktiv, der Rest ist unsichtbar.

    Nun hättest du selbst im vollen Screen-Client keine Übersichtsprobleme mehr. Du weißt genau, bei welchem Ereignis welches Memo gezeigt wird.

    Damit hast du auch ein klar definierbares Ereignis: Das OnClick des dazugehörigen Buttons.

    Deine NeuzeichenFunktion sollte einen aussagekräftigen Namen haben. Mach ihn public. Jetzt rufst du in OnClick des Button zB. auf
    MyMemo->Show();
    MyMemo->MyNewPaint();
    Oder je nachdem, wie die Funktion aufzurufen ist.

    Alternativ könntest du auch bei passender Situation nur ein Memo benutzen und den Inhalt je nach Aufruf wchseln. Du hättest dann nur die Speicherbelegungen für Momo->Text.

    So in etwa würde ich mir den Aufbau zumindest in etwa vorstellen. Vielleicht paßt es aber doch nicht zur Situation?



  • hi,
    ist kein wirklicher Karteikasten auch kein TabControl.
    Angezeigt werden alle Memos auf einem Panel, man kann für jedes Memo beliebige Kategorien und ein Wiedervorlagedatum angeben und dann nach der Kompination von Kategorien und Datum die Sichtbarkeit der Memos steuern. Überlappen sich dann noch Memos kann mit diese mit der Maus verschieben.
    Also weder die Anzahl noch die Position der Memos ist festgelegt und damit halte ich eine Anzeige welches Memo den Fokus hat direkt am Memo für die sinnvollste.

    Aber ich glaube es weiß keiner so richtig, wie ich an das Paint-Ereignis des Memos komme. Oder täusche ich mich da?

    snoopy_kmo 😞



  • Also ich würde die Methode mit nem TShape (oder evtl. ein entspr. TPanel), um ein TMemo als "gefucused" zu kennzeichnen, doch nochmal aufgreifen. Du brauchst ja nicht um jedes TMemo so ein Teil legen. Um mal bei TShape zu bleiben, bereite EIN TShape mit der entspr. Farbe vor und setze es invisible. Sobald ein TMemo den Focus erhält (OnEnter) passe das TShape in der Größe und Position an und setze es visible. Verliert das TMemo den Focus (OnExit), setze das TShape wieder invisible ...



  • hi,
    ich hab das mal probiert.
    Wie gesagt können die Memos wild aufeinander liegen.
    TShape, TPanel und TPaintBox werden aber unter allen Memos gezeichnet.
    Das heißt wenn ein aktives kleines Memo auf einem größeren zu liegen kommt wird das TShape,TPanel bzw. TPaintBox von dem darunterliegenden großen Memo verdeckt.

    snoopy_kmo 😞



  • Wie wär's z.B. wenn du das aktive Memo in einer anderen Farbe darstellst?



  • Wenn Du ein TPanel verwendest, gibt dem aktiven TMemo::Parent dieses TPanel an und rufe dann TPanel::BringToFront auf. Probier in der Richtung mal weiter, ich kann Dir das jetzt "leider" nicht ausprobieren und weitere Vorschläge ausarbeiten.
    Ansonsten JeGr's Vorschlag.



  • Danke,

    mit BringToFront() bleibt das TPanel oben, so gehts.

    Danke

    snoopy_kmo 😃


Anmelden zum Antworten