Autor Beitrag
TheHolyMan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 14.03.05 12:01 
Hallo

ich hab folgens Problem

ich Hab 2 gleich grosse Memos die sich nebeneinander befinden . Beide haben eine Horrizontale Scrollbar.
Nun möchte ich dass sobald eine Scrollbar bewegt wird die andere genau gleich mitbewegt wird, so dass

z.B.
Linie 5 vom Memo1 genau neben der Linie 5 vom Memo 2 ist.

Vielen Dank im Voraus.!
Edmund Jenner-Braunschmie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 34

WIN XP Professional
D2009 Professional
BeitragVerfasst: Mo 14.03.05 12:41 
Ich weiß nicht, ob dir das hilft:

Anstatt dem Memo könntest du eine Tscrollbox (unter Zusätzlich) verwenden und dort ein Memo reinsetzen !
Aber die Größe des Memos müsstest du dann selbst zu Laufzeit vergeben.

Jedenfalls mit TScrollBox kann man sehr viel bezüglich der Scrollbars komfortabel verändern; s'gibt auch einige Events hierfür :wink: .

mfg Edi
TheHolyMan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 14.03.05 12:55 
naja gibt es auch eine andere lößung .. denn die Grösse der Memos zur Laufzeit zu Ändern ist auch nicht so leicht .. da man sich die grösse einer Zeile in Pixeln ausrechnen müsste .. oder ?

trotzdem vielen Dank
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mo 14.03.05 12:59 
du könntest 2 listboxen verwenden, wird dort mit SelStart eine zeile selektiert, so springt der markierte eintrag automatisch in die mitte. also 2 mal selstart := 5, und beide listboxen haben die gleiche position

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
TheHolyMan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mo 14.03.05 14:31 
alles mit listboxen zu implementieren ist auch nicht das Wahre ...

giebt es keine lößund dafür das Direkt zu machen
pharma-com
Hält's aus hier
Beiträge: 6

XP Prof
D5 Prof
BeitragVerfasst: Mo 14.03.05 16:32 
Hi,

den Code musst du selber mal durchforsten, ist ja selbsterklärend..... ;-)
Scrollbaränderungen von memo1 werden dann mit memo2 synchronisiert


Gruß
Stefan

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    FOldWindowProc: TWndMethod;
  public
    { Public-Deklarationen }
    procedure MyNewWndProc(var Message: TMessage);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


procedure TForm1.FormCreate(Sender: TObject);
var
   n : integer;
begin
   // erstmal was reinschreiben, damit man was sieht....
   for n := 0 to 100 do
   begin
      memo1.lines.add('Linie '+inttostr(n));
      memo2.lines.add('Linie '+inttostr(n));
   end;

   FOldWindowProc:=memo1.WindowProc;
   memo1.WindowProc := MyNewWndProc;

end;

procedure TForm1.MyNewWndProc(var Message: TMessage);
var
   scrollinfo: TScrollinfo;
   lines_to_scroll : integer;
begin
   FOldWindowProc(Message);
   if (Message.Msg = WM_VScroll) or (Message.Msg = WM_MOUSEWHEEL) then
   begin
      GetScrollInfo(memo1.handle,SB_VERT,scrollinfo);  // Position von Scrollbar holen
      SetScrollInfo(memo2.handle,SB_VERT,scrollinfo,false);  // Position von Scrollbar synchronisieren
      lines_to_scroll := sendmessage(memo1.handle,EM_GETFIRSTVISIBLELINE,0,0)-
                         sendmessage(memo2.handle,EM_GETFIRSTVISIBLELINE,0,0);
      sendmessage(memo2.handle,EM_LINESCROLL,0,lines_to_scroll);
   end;
end;


end.


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.