Event OnPaint bei TMemo
-
i++; sollte nicht überlaufen, da ich ja dort eine Breakpoint habe, um zu sehen, daß WM_PAINT richtig verlinkt ist.
Solange meine Routine nicht im richtigen Moment aufgerufen wird, brauche ich mich um deren Inhalt noch nicht kümmern.snoopy_kmo
-
Ich hab jetzt zwar hier nicht alles durchgelesen, nur Deine Frage am Anfang, aber warum legst Du nicht z.B. ein TShape "unter" das TMemo, die Ränder leicht über das TMemo überstehend und steuerst die Farbe von TShape::Brush im TMemo::OnEnter bzw. TMemo::OnExit ?
-
Danke,
das hört sich nicht schlecht an, das werde ich versuchenDanke
snoopy_kmo
-
Das Problem bleibt grundsätzlich das gleiche.
Da ich mehrere Memo übereinanderliegen habe müßte ich das Shape des obersten Memo vor diesem zeichnen, da ich aber nicht weiß, wann dieses gezeichnet wird, sind alle Shapes unterhalb aller Memos, also nicht zu sehen.Ich habe keinen Dunst, wie ich das Problem lösen soll.
Bin für jede Hilfe dankbar.snoopy_kmo
-
Original erstellt von snoopy_kmo:
mehrere Memo übereinanderliegen habeDa gibt es bestimmt eine bessere Lösung, wozu brauchst du denn die die ganzen Memos?
-
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